2016-10-15 6 views
1

Mit welchem ​​Bezugspunkt dreht ImageView.setRotate(40) das Bild in Javafx?rotierendes Bild in Javafx

Ich schreibe

ImageView iv = new ImageView(image); 
iv.setRotate(40); 
SnapshotParameters params = new SnapshotParameters(); 
params.setFill(Color.TRANSPARENT); 
Image rotatedImage = iv.snapshot(params, null); 
gc.drawImage(rotatedImage, 0, 0); 

Aber das Bild nicht dreht sich mit Bezug auf die Mitte des Bildes.

Antwort

0

Vom rotate() documentation:

Der Drehpunkt, um den die Drehung erfolgt die Mitte des untransformierten layoutBounds ist.

So wird das Bild um seinen Mittelpunkt gedreht.

Ein Beispiel:

import javafx.application.Application; 
import javafx.scene.*; 
import javafx.scene.SnapshotParameters; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.image.*; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class Rotor extends Application { 

    public static final String LOC = 
      "http://icons.iconarchive.com/icons/custom-icon-design/flatastic-10/64/Bear-icon.png"; 

    @Override 
    public void start(Stage stage) throws Exception { 
     ImageView iv = new ImageView(new Image(LOC)); 
     iv.setRotate(40); 

     SnapshotParameters params = new SnapshotParameters(); 
     params.setFill(Color.TRANSPARENT); 
     Canvas canvas = new Canvas(100, 100); 

     Image rotatedImage = iv.snapshot(params, null); 
     canvas.getGraphicsContext2D().drawImage(rotatedImage, 0, 0); 
     stage.setScene(new Scene(new Group(canvas))); 

     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

bear

Wie Sie auf einer Leinwand gedrehten Bilder zeichnen, möchten Sie vielleicht Leinwand verwenden verwandelt, anstatt Snapshot Methoden, um dies zu helfen zu erreichen. Siehe zum Beispiel: