1 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
具有所提供參數(shù)的快照使用父節(jié)點(diǎn)中的尺寸來(lái)確定圖像的大小。在大多數(shù)情況下,旋轉(zhuǎn)圖像會(huì)產(chǎn)生與原始圖像不同的尺寸。在這些情況下,快照比原始圖像大。(考慮旋轉(zhuǎn) 45° 的正方形圖像;旋轉(zhuǎn)后圖像的寬度和高度是原始圖像對(duì)角線的大小,即大 0 倍sqrt(2) = 1.41...)。
由于drawImage縮放繪制的圖像以適合大小為 的矩形width x height,所以大于此大小的快照將按比例縮小。
使用 的變換GraphicsContext來(lái)避免Image每次調(diào)用該方法時(shí)都創(chuàng)建一個(gè)新實(shí)例,并避免縮放圖像。
例子
@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();
}
添加回答
舉報(bào)