1

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

4

2 回答 2

3

好的,这是我设法制作的代码(实际上是从这里借用和调整:旋转位图像素):

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。

最好有一个系统解决方案,它会更优化,有旋转点坐标,但这对我有用,希望对其他人有帮助。

于 2014-04-26T10:54:11.217 回答
1

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

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

代替

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

否则,就像冠军一样工作。

于 2018-09-21T01:35:26.287 回答