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();
}
添加回答
举报