在java中将图像旋转90度[重复]

Posted

技术标签:

【中文标题】在java中将图像旋转90度[重复]【英文标题】:rotating an image 90 degrees in java [duplicate] 【发布时间】:2013-04-02 08:42:59 【问题描述】:

我已经设法旋转图像180 degrees 但希望旋转它90 degrees clockwise 有人可以编辑我的代码,以便它可以解释。谢谢。

 private void rotateClockwise()
    
        if(currentImage != null)
            int width = currentImage.getWidth();
            int height = currentImage.getHeight();
            OFImage newImage = new OFImage(width, height);
            for(int y = 0; y < height; y++) 
                for(int x = 0; x < width; x++) 
                    newImage.setPixel( x, height-y-1, currentImage.getPixel(x, y));
                
        
            currentImage = newImage;
            imagePanel.setImage(currentImage);
            frame.pack();
    
    

【问题讨论】:

试着想想当你旋转图像时,图像的每个四分之一会发生什么。我认为这应该是一种很好的方法。分别解决每个季度。 example 感谢 Vignesh Vino 的示例。非常感谢我设法让它工作。 你需要交换 x,y。我会将此作为答案,但不能。 OFImage newImage = new OFImage(height, width); newImage.setPixel(height-1-y, x, currentImage.getPixel(x, y)); 【参考方案1】:

使用这个方法。

/**
 * Rotates an image. Actually rotates a new copy of the image.
 * 
 * @param img The image to be rotated
 * @param angle The angle in degrees
 * @return The rotated image
 */
public static Image rotate(Image img, double angle)

    double sin = Math.abs(Math.sin(Math.toRadians(angle))),
           cos = Math.abs(Math.cos(Math.toRadians(angle)));

    int w = img.getWidth(null), h = img.getHeight(null);

    int neww = (int) Math.floor(w*cos + h*sin),
        newh = (int) Math.floor(h*cos + w*sin);

    BufferedImage bimg = toBufferedImage(getEmptyImage(neww, newh));
    Graphics2D g = bimg.createGraphics();

    g.translate((neww-w)/2, (newh-h)/2);
    g.rotate(Math.toRadians(angle), w/2, h/2);
    g.drawRenderedImage(toBufferedImage(img), null);
    g.dispose();

    return toImage(bimg);

取自我的ImageTool 班级。

希望对你有帮助。

【讨论】:

你为什么要复制图像,它不是通过在绘图时应用 90 度旋转仿射变换来完成的吗?请澄清。 @Mihir 这是我的游戏的要求。这个类来自我的游戏引擎,所以我使用了它。你可以使用任何你喜欢的东西。 感谢您的澄清 太棒了。非常感谢。 我实际上必须创建一个新的缓冲图像。否则,我会得到意想不到的结果。【参考方案2】:

看看http://docs.oracle.com/javase/tutorial/2d/index.html 和http://docs.oracle.com/javase/6/docs/api/java/awt/Graphics2D.html#rotate%28double%29 以及这篇帖子Rotate an image in java

【讨论】:

以上是关于在java中将图像旋转90度[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java - 将缓冲图像保存到文件旋转 90 度时出现问题

Leecode-48:旋转图像(矩阵顺时针旋转90度)

OpenCV图像旋转90度函数cv2.transpose导致镜像翻转

将图像旋转 90 度 php

Leetcode——旋转图像(90度)

如何在两个方向上将图像旋转 90 度