如何在Java中创建一个将图像顺时针旋转90度的方法?

如何在Java中创建一个将图像顺时针旋转90度的方法?,java,rotation,Java,Rotation,这就是我到目前为止所做的: 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

这就是我到目前为止所做的:

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;
}
公共静态照片旋转(照片){
照片旋转拷贝=新照片(photo.getHeight(),photo.getWidth());
像素起始像素=photo.getPixel(0,0);
对于(int col=0;col
但是,此方法会逆时针旋转90度拍摄的任何照片。如何修复此问题?

公共静态照片旋转(照片){
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;
}
照片旋转拷贝=新照片(photo.getHeight(),photo.getWidth()); 像素起始像素=photo.getPixel(0,0); 对于(int col=0;col
我想。

公共静态照片旋转(照片){
照片旋转拷贝=新照片(photo.getHeight(),photo.getWidth());
像素起始像素=photo.getPixel(0,0);
对于(int col=0;col

我想。

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

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

想想这个问题。顺时针旋转90'后,坐标(0,0)(0,高度)应变为(0,高度)(宽度,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中)

想想这个问题。顺时针旋转90'后,坐标(0,0)(0,高度)应变为(0,高度)(宽度,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);

90*逆时针=x*顺时针。找到x并重新考虑该方法。您的代码没有旋转图像;它正在翻转图像(沿x=y的直线镜像图像)。Big Al是错误的,您的代码确实在旋转。你已经测试过了,对吗?问题是逆时针方向的?那你为什么听他说它在翻转呢?@Zaphod42不,它没有旋转。
[0][0]
处的元素始终保持不变,
[rowscont][colscont]
处的元素也保持不变。看一看,是的,它实际上在两个轴上镜像了图像,这使得它看起来几乎像是在旋转,但事实并非如此。我修改了我的答案,让他知道正确的方向。90*逆时针=x*顺时针。找到x并重新考虑该方法。您的代码没有旋转图像;它正在翻转图像(沿x=y的直线镜像图像)。Big Al是错误的,您的代码确实在旋转。你已经测试过了,对吗?问题是逆时针方向的?那你为什么听他说它在翻转呢?@Zaphod42不,它没有旋转。
[0][0]
处的元素始终保持不变,
[rowscont][colscont]
处的元素也保持不变。看一看,是的,它实际上在两个轴上镜像了图像,这使得它看起来几乎像是在旋转,但事实并非如此。我修改了我的答案,为他指出了正确的方向。哈哈,你知道你做的和作者完全一样,但顺序不同吗?:)现在更正它(希望这次它能起作用-我知道该怎么做,但我今天的空间想象力有点弱;)哈哈,你知道你做的和作者完全一样,但顺序不同吗?:)现在纠正它(希望这次它会起作用-我知道该怎么做,但我今天的空间想象力有点弱;)Sry先生,如果你按照“X变成Y,Y变成X”的方式来做,你能解释一下,{0,0}左上角的地狱像素是如何旋转到右上角{max_width,0}还是旋转到左下角{0,max_height}的吗@libik啊,好吧,你是对的,它既旋转又镜像图像,所以这并不完全正确。我修改了我的答案。Sry伙计,如果你按照“X变成Y,Y变成X”的方式来做,你能解释一下,{0,0}左上角的地狱像素是如何旋转到右上角{max_width,0}或左下角{0,max_height}的吗?:)@libik啊,好吧,你是对的,它既旋转又镜像图像,所以这并不完全正确。我修改了我的答案。