如何将图像绘制到 Pixmap,但旋转了某个角度,就像在 Batch 上绘制时一样?没有像批量绘图方法那样将角度作为参数的 Pixmap 方法。
问问题
1450 次
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 回答