Java Image Rotation无法正常工作

时间:2017-01-16 10:46:47

标签: java image class rotation

Hello其他程序员,

我正在制作游戏,我希望能够旋转我的图像。 我不使用Graphics2d,因为我自己创建了渲染类(主要是)。

问题是我当前的旋转方法在​​新(旋转)图片中留下了洞,它也没有将新像素放在正确的位置......

我没有看到问题,所以也许你可以帮忙:)。

    public void drawRotatedImage(Image image, int offX, int offY, double degree){
    int Iwidth = image.width;
    int Iheight = image.height;

    double angle = Math.toRadians(degree);
    double sin = Math.sin(angle);
    double cos = Math.cos(angle);
    double x0 = 0.5 * (Iwidth  - 1);     // point to rotate about
    double y0 = 0.5 * (Iheight - 1);     // center of image

    for(int x = 0; x < Iwidth; x++){
        for(int y = 0; y < Iheight; y++){
            double a = x - x0;
            double b = y - y0;
            int xx = (int) (+a * cos - b * sin + x0);
            int yy = (int) (+a * sin + b * cos + y0);

            if(xx >= 0 && xx < width && yy >= 0 && yy < height){
                setPixel(x+offX, y+offY, image.pixels[xx + yy*image.width]);
            }
        }
    }
}

setpixel函数如下所示:

 public void setPixel(int x, int y, int color){
    if((x < 0 || x >= width || y < 0 || y >= height) || color == 0xffff00ff){
        return;
    }
    pixels[x + y * width] = color;


}

这适用于非旋转图像...但是当我旋转它会产生奇怪的屎 除非我使用完美的正方形作为图像然后旋转90或180 但除此之外,我还得到了充满漏洞和错误像素的图像......

所以要明确它不是一个错误或类似的东西...我只是在寻找更好的解决方案或什么来填补漏洞。

1 个答案:

答案 0 :(得分:0)

问题是您在旋转前使用目的地颜色设置源(原始)点:

 setPixel(x+offX, y+offY, image.pixels[xx + yy*image.width]);// you get the color of destination (xx,yy) and set it to source (x,y).

这就是为什么当度数为180时它起作用的原因,因为操作的反向看起来是正确的,而它仍然是反转的。

正确的方法是:

setPixel(xx+offX, yy+offY, image.pixels[x+ y*image.width]);