2016-04-07 9 views
0

Dieser Code unten ist meine paintComponent zum Malen von Bildobjekten, aber während ich das Bild drehen möchte, ohne es über das Zentrum zu bewegen, sondern es auch nach einem bestimmten Wert zu übersetzen.Wie man ein Bild nach dieser Rotationstransformation übersetzt

  trans.translate(xShift, yShift); 

das ist die Linie, die ich mein Bild zu verwenden versucht, zu übersetzen, aber es schneidet aus irgendeinem Grund jedes Mal ein Teil des Bildes aus.

protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      if (myImage != null) { 
       AffineTransform trans = new AffineTransform(); 
       trans.translate(getWidth()/2, getHeight()/2); 
       trans.rotate(piece.getOrientation() * Math.PI/2); 
       trans.translate(-myImage.getWidth()/2, -myImage.getHeight()/2); 
       trans.translate(xShift, yShift); 
       Graphics2D g2d = (Graphics2D) g; 
       g2d.drawImage(myImage, trans, null); 
      } 
     } 

Antwort

0

Mein Gefühl ist, dass Java ein Problem mit Compoundierung Transformationen hat.

Vielleicht können Sie einen anderen Ansatz finden: z. verwandelt das Bild selbst, dann gilt eine einfache Übersetzung:

BufferedImage b22=new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); 
    Graphics2D g2=(Graphics2D)b22.getGraphics(); 
    AffineTransform trans = new AffineTransform(); 
    trans.translate(getWidth()/2, getHeight()/2); 
    trans.rotate(Math.PI/2); 
    trans.translate(-bim.getWidth()/2, -bim.getHeight()/2); 
    g2.drawImage(bim, trans, null); 
    AffineTransform trans2 = new AffineTransform(); 
    trans2.translate(xoffset, yoffset); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.drawImage(b22, trans2, null); 
    // or just g2d.drawImage(b22, xoffset, yoffset, null); 

Natürlich wird es abgeschnitten, wenn Sie von einem gewissen Grad übersetzen.