2011-12-26 15 views
13

個別にイメージを回転できる必要があります(javaで)。これまで私が見つけたのはg2d.drawImage(image、affinetransform、ImageObserver)だけです。残念なことに、私は特定のポイントで画像を描画する必要があります。引数を指定して1つの画像を別々に回転させる方法はありません。また、xとyを設定することもできます。どんな助けもありがとうJava:回転イメージ

答えて

25

これはあなたがそれを行う方法です。このコードは、「画像」と呼ばれるバッファリングされたイメージのexistanceを前提としてい

// The required drawing location 
int drawLocationX = 300; 
int drawLocationY = 300; 

// Rotation information 

double rotationRequired = Math.toRadians (45); 
double locationX = image.getWidth()/2; 
double locationY = image.getHeight()/2; 
AffineTransform tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY); 
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR); 

// Drawing the rotated image at the required drawing locations 
g2d.drawImage(op.filter(image, null), drawLocationX, drawLocationY, null); 
+0

これは、おかげで働いていました! – Jimmt

+2

なぜそんなに複雑ですか?トランスフォームには回転と平行移動の両方が含まれているので、 'g2d.drawImage(image、tx、ImageObserver)'と 'tx'を答えます。 –

+2

ありがとうございますが、画像の一部が途切れてしまいます。 – HyperNeutrino

8

AffineTransformインスタンスが(一緒に追加された)に連結することができます(あなたのコメントのように述べています)。したがって、「原点へのシフト」、「回転」、「希望の位置へのシフト」を組み合わせた変換を行うことができます。

+4

+1 ['RotateApp'](http://stackoverflow.com/a/3420651/230513)がその例です。 – trashgod

0
public static BufferedImage rotateCw(BufferedImage img) 
{ 
    int   width = img.getWidth(); 
    int   height = img.getHeight(); 
    BufferedImage newImage = new BufferedImage(height, width, img.getType()); 

    for(int i=0 ; i < width ; i++) 
     for(int j=0 ; j < height ; j++) 
      newImage.setRGB(height-1-j, i, img.getRGB(i,j)); 

    return newImage; 
} 

このような複雑なドロー文を使用せずにそれを行うための簡単な方法https://coderanch.com/t/485958/java/Rotating-buffered-image

0

から:

//Make a backup so that we can reset our graphics object after using it. 
    AffineTransform backup = g2d.getTransform(); 
    //rx is the x coordinate for rotation, ry is the y coordinate for rotation, and angle 
    //is the angle to rotate the image. If you want to rotate around the center of an image, 
    //use the image's center x and y coordinates for rx and ry. 
    AffineTransform a = AffineTransform.getRotateInstance(angle, rx, ry); 
    //Set our Graphics2D object to the transform 
    g2d.setTransform(a); 
    //Draw our image like normal 
    g2d.drawImage(image, x, y, null); 
    //Reset our graphics object so we can draw with it again. 
    g.setTransform(backup);