it-swarm.com.de

Java: Bilder drehen

Ich muss in der Lage sein, Bilder einzeln zu drehen (in Java). Das einzige, was ich bisher gefunden habe, ist g2d.drawImage (image, affinetransform, ImageObserver). Leider muss ich das Bild an einem bestimmten Punkt zeichnen, und es gibt keine Methode mit einem Argument, das 1. das Bild separat dreht und 2. mir erlaubt, x und y einzustellen. Jede Hilfe wird geschätzt

15
Jimmt

So kannst du es machen. Dieser Code setzt voraus, dass ein gepuffertes Bild namens "image" (wie in Ihrem Kommentar angegeben)

// 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

AffineTransform-Instanzen können verkettet (zusammengefügt) werden. Daher können Sie eine Transformation durchführen, die "Verschieben nach Ursprung", "Drehen" und "Zurückkehren in die gewünschte Position" kombiniert.

8
Andrew Thompson

Eine einfache Möglichkeit, dies ohne die Verwendung einer solch komplizierten draw-Anweisung zu tun:

    //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;
}

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

0
Arturgspb