Java: вращающиеся изображения - PullRequest
15 голосов
/ 27 декабря 2011

Мне нужно иметь возможность поворачивать изображения по отдельности (в Java). Единственное, что я нашел до сих пор, это g2d.drawImage (image, affinetransform, ImageObserver). К сожалению, мне нужно нарисовать изображение в определенной точке, и нет метода с аргументом, который 1. поворачивает изображение отдельно и 2. позволяет мне устанавливать x и y. любая помощь приветствуется

Ответы [ 4 ]

29 голосов
/ 27 декабря 2011

Вот как вы можете это сделать.Этот код предполагает наличие буферизованного изображения с именем 'image' (как говорится в вашем комментарии)

// 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);
8 голосов
/ 27 декабря 2011

AffineTransform экземпляры могут быть объединены (сложены вместе).Поэтому у вас может быть преобразование, которое сочетает в себе «сдвиг в начало координат», «поворот» и «сдвиг назад в нужное положение».

1 голос
/ 30 января 2018

Простой способ сделать это без использования такого сложного оператора рисования:

    //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);
0 голосов
/ 20 июля 2017
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

...