如何在像素图上绘制旋转图像(LibGDX)

时间:2014-03-16 19:42:32

标签: libgdx image-rotation pixmap

如何将图像绘制到Pixmap,但是可以旋转某个角度,就像在Batch上绘图时一样?没有具有角度作为参数的Pixmap方法,就像批量绘图方法一样。

2 个答案:

答案 0 :(得分:3)

好的,这是我设法制作的代码(实际上是从这里借用和调整:Rotate Bitmap pixels):

public Pixmap rotatePixmap (Pixmap src, float angle){
    final int width = src.getWidth();
    final int height = src.getHeight();
    Pixmap rotated = new Pixmap(width, height, src.getFormat());

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


    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            final int
            centerx = width/2, centery = height / 2,
            m = x - centerx,
            n = y - centery,
            j = ((int) (m * cos + n * sin)) + centerx,
            k = ((int) (n * cos - m * sin)) + centery;
            if (j >= 0 && j < width && k >= 0 && k < height){
                rotated.drawPixel(x, y, src.getPixel(j, k));
            }
        }
    }
    return rotated;

}

它创建并返回通过源Pixmap的旋转Pixmap。它围绕中心旋转,它实际上非常快,在PC和我的HTC Sensation上。

并且不要忘记在使用后处理Pixmap。

为此提供更优化的系统解决方案会更好,有旋转点坐标,但这对我有用,希望对其他人有用。

答案 1 :(得分:1)

您的代码的k和j颠倒了。照原样,应该为0度的角度绘制相同的东西,但事实并非如此。它将旋转90度。所以一行应该是

rotated.drawPixel(x, y, src.getPixel(j, k));

代替

rotated.drawPixel(x, y, src.getPixel(k, j));

否则,就像冠军一样。