为了账号安全,请及时绑定邮箱和手机立即绑定

如何使图像不因旋转而调整大小(在 JavaFX 中)?

如何使图像不因旋转而调整大小(在 JavaFX 中)?

繁星淼淼 2022-12-15 17:05:59
我有一个旋转图像并使用 drawImage 方法将其显示到画布上的方法。但是,当旋转图片时,图片会收缩和变大,因为宽度和高度会发生变化(比如旋转一个正方形,图片的宽度和高度会发生变化)。这是方法:public void rotateImage(GraphicsContext gc, double speed) {    erase(gc);  // erases the previous image    imgView.setRotate(imgView.getRotate() + speed);    SnapshotParameters params = new SnapshotParameters();    params.setFill(Color.TRANSPARENT);    image = imgView.snapshot(params, null);    gc.drawImage(image, pos.x, pos.y, width, height);}任何帮助将不胜感激,如果需要,我可以发布其余代码。
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

具有所提供参数的快照使用父节点中的尺寸来确定图像的大小。在大多数情况下,旋转图像会产生与原始图像不同的尺寸。在这些情况下,快照比原始图像大。(考虑旋转 45° 的正方形图像;旋转后图像的宽度和高度是原始图像对角线的大小,即大 0 倍sqrt(2) = 1.41...)。


由于drawImage缩放绘制的图像以适合大小为 的矩形width x height,所以大于此大小的快照将按比例缩小。


使用 的变换GraphicsContext来避免Image每次调用该方法时都创建一个新实例,并避免缩放图像。


例子


@Override

public void start(Stage primaryStage) {

    Image image = new Image("https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/240px-Smiley.svg.png");

    Canvas canvas = new Canvas(500, 500);

    GraphicsContext context = canvas.getGraphicsContext2D();

    Slider slider = new Slider(0, 360, 0);

    Button btn = new Button("draw");

    VBox root = new VBox(canvas, slider, btn);



    btn.setOnAction(evt -> {

        context.setFill(Color.TRANSPARENT);

        context.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());


        double posX = 200;

        double posY = 150;


        context.save();


        // apply transformation that puts makes (posX, posY) the point

        // where (0,0) is drawn and rotate

        context.translate(posX, posY);

        context.rotate(slider.getValue());


        // draw with center at (0, 0)

        context.drawImage(image, -image.getWidth()/2, -image.getHeight()/2);


        // undo transformations

        context.restore();

    });


    primaryStage.setScene(new Scene(root));

    primaryStage.show();

}


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信