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 但除此之外,我还得到了充满漏洞和错误像素的图像......
所以要明确它不是一个错误或类似的东西...我只是在寻找更好的解决方案或什么来填补漏洞。
答案 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]);