【问题标题】:How can I create a method in Java that rotates an image 90 degrees clockwise?如何在 Java 中创建一个将图像顺时针旋转 90 度的方法?
【发布时间】:2013-10-24 06:07:06
【问题描述】:

这是我目前所拥有的:

public static Photograph rotated(Photograph photo) {
    Photograph rotated_copy = new Photograph(photo.getHeight(), photo.getWidth());
    Pixel starting_pixel = photo.getPixel(0,0);

    for(int col = 0; col < photo.getWidth(); col++){
        for(int row = 0; row < photo.getHeight(); row++){
            starting_pixel = photo.getPixel(col,row);
            rotated_copy.setPixel(row, col, starting_pixel);
        }
    }
    return rotated_copy;
}

但是,此方法会将拍摄的任何照片逆时针旋转 90 度。我该如何解决这个问题?

【问题讨论】:

  • 90* 逆时针 = x* 顺时针。找到 x 并重新考虑方法。
  • 您的代码没有旋转图像;它正在翻转图像(沿 x=y 的线镜像图像)。
  • Big Al 错了,您的代码确实在旋转。你已经测试过了,对吧?问题是逆时针?那你为什么要听他说它翻转?
  • @Zaphod42 不,它没有旋转。 [0][0] 处的元素始终保持不变,[rowscount][colscount] 处的元素也是如此。看看this IDEOne example with a simple int array
  • 是的,它实际上是在两个轴上镜像图像,这使它看起来几乎像它在旋转,但事实并非如此。我修改了我的答案,为他指明了正确的方向。

标签: java rotation


【解决方案1】:
public static Photograph rotated(Photograph photo) {
    Photograph rotated_copy = new Photograph(photo.getHeight(), photo.getWidth());
    Pixel starting_pixel = photo.getPixel(0,0);

    for(int col = 0; col < photo.getWidth(); col++){
        for(int row = 0; row = photo.getHeight(); row++){
            starting_pixel = photo.getPixel(col,row);
            rotated_copy.setPixel(photo.getHeight() - row - 1, col, starting_pixel);
        }
    }
    return rotated_copy;
}

我认为。

【讨论】:

  • 大声笑,你知道你和作者完全一样,但顺序不同吗? :)
  • 现在更正了(希望这次能成功——我知道该怎么做,但我的空间想象力今天有点弱;))
【解决方案2】:

编辑:嗯,不幸的是,这很接近但不太有效。它在旋转图像时反射图像。不过你可以解决这个问题:

您必须以不同的顺序存储它们,而不是将坐标放在相反的位置(X 在 Y 中,Y 在 X 中)。

想想问题。顺时针旋转 90' 后,坐标 (0,0) (0,HEIGHT) 应该变为 (0, HEIGHT), (WIDTH, 0) 对吧?

所以而不是:

starting_pixel = photo.getPixel(col,row);
rotated_copy.setPixel(row, col, starting_pixel);

你需要类似的东西

starting_pixel = photo.getPixel(col,row);
rotated_copy.setPixel(photo.getWidth() - row, col, starting_pixel);

【讨论】:

  • 对不起,如果您将其作为“X 变为 Y,Y 变为 X”,您能解释一下,{0,0} 处左上角的地狱像素如何旋转到右上角角 {max_width,0} 还是左下角 {0,max_height}? :)
  • @libik 嗯,你说得对,它既旋转又镜像图像,所以这不太正确。我修改了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
相关资源
最近更新 更多