2

我有一个Canvas和一个Bitmap。我必须在画布上绘制位图两次并旋转它们。这是我的代码:

Bitmap bitmap = ... ;
Matrix matrix = new Matrix();
Camera camera = new Camera();
camera.save();

// First drawing:
camera.rotateX(x_rotate_angle);
camera.rotateY(y_rotate_angle);
camera.getMatrix(matrix);
matrix.postTranslate(0, 0);
matrix.postScale(3, 3);
canvas.drawBitmap(bitmap, matrix, null);
camera.restore();

// Second drawing:
camera.rotateX(x_rotate_angle);
camera.rotateY(y_rotate_angle);
camera.getMatrix(matrix);
matrix.postTranslate(10, 10 + bitmap.getHeight());
matrix.postScale(3, 3);
canvas.drawBitmap(bitmap, matrix, null);

旋转前的结果:

在此处输入图像描述

当位图仅旋转 X 轴时,一切都很好。在这种情况下,结果如下所示:

在此处输入图像描述

在上面的两个图像中,您可以看到所有边缘都是parallel。但是当位图旋转Y 轴时,边缘将不平行(顶部位图的底部边缘与底部位图的顶部边缘交叉):

在此处输入图像描述

我做错什么了吗?

4

1 回答 1

4

你没有做错任何事,只是你没有理解你将从代码中得到的结果。您使用的相机是 3D 相机,您会看到在 3D 空间中移动相机的结果。旋转相机时,平行线通常不会保持平行。您在绕 y 轴旋转时注意到了伪影,但它也出现在 x 轴旋转的插图中。请注意,对于 x 轴,左右两侧不平行;左侧比右侧更接近垂直。

Androidcanvas对象具有缩放、倾斜、平移和旋转操作。如果您需要的是 2D 操作,您可以camera完全放弃该对象。

于 2012-11-17T15:20:16.427 回答