web-dev-qa-db-fra.com

Java: rotation des images

Je dois pouvoir faire pivoter les images individuellement (en Java). La seule chose que j'ai trouvée jusqu'à présent est g2d.drawImage (image, affinetransform, ImageObserver). Malheureusement, je dois dessiner l'image à un moment donné, et il n'y a pas de méthode avec un argument qui 1.passe l'image séparément et 2. me permet de définir x et y. toute aide est appréciée

15
Jimmt

Voici comment vous pouvez le faire. Ce code suppose l'existence d'une image en mémoire tampon appelée "image" (comme le dit votre commentaire).

// 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);
28
AlanFoster

Des instances AffineTransform peuvent être concaténées (additionnées). Par conséquent, vous pouvez avoir une transformation combinant 'décalage vers l'origine', 'rotation' et 'retour à la position souhaitée'.

8
Andrew Thompson

Un moyen simple de le faire sans utiliser un énoncé de tirage aussi compliqué:

    //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.
    g2d.setTransform(backup);
1
tobahhh
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;
}

de https://coderanch.com/t/485958/Java/Rotating-buffered-image

0
Arturgspb