Если я поверну изображение с помощью класса Graphic.Camera на Android, изображение было повреждено
Я хочу сделать изображение в перспективе, поэтому я повернул его с помощью класса Graphic.camera. В повороте нет ничего особенного, кроме особых действий поворота.
когда я поворачиваю изображение
Это случилось, когда камера проходит через изображение, на которое я полагаю, но это не ясно. Есть ли решение или проблема в моем коде?
Вот мой код ротации.
public class FieldGraphic extends Graphic {
private Camera camera;
private Matrix matrix;
private int width;
private int height;
private int angleX;
private int angleY;
private int angleZ;
public FieldGraphic(String name) {
super(name, Type.Draw_Type.FIELD);
camera = new Camera();
matrix = new Matrix();
Display display = activity.getWindowManager().getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics);
width = metrics.widthPixels;
height = metrics.heightPixels;
dst = new Rect(0, 0, width, height);
angleX = 0;
angleY = 0;
angleZ = 0;
camera.rotateX(45);
}
public void getAngle(int x, int z)
{
if(angleX != x) {
camera.rotateZ(-angleX + x);
angleX = x;
}
if(angleZ != z) {
camera.rotateX(angleZ - z);
angleZ = z;
}
camera.getMatrix(matrix);
matrix.preTranslate(-width/2, -height/2);
matrix.postTranslate(width/2, height/2);
}
public void setDestination(double widthRatio, double heightRatio, Common_Math.Matrix1X4 focus)
{
int bitmapWidth = bitmap.getWidth();//(int)(bitmap.getWidth() * widthRatio);
int bitmapHeight = bitmap.getHeight();//(int)(bitmap.getHeight() * heightRatio);
dst = new Rect(-bitmapWidth/2 - (int)focus.getMatrix1X3().getX(), -bitmapHeight/2 - (int)focus.getMatrix1X3().getZ(),
bitmapWidth/2 - (int)focus.getMatrix1X3().getX(), bitmapHeight/2 - (int)focus.getMatrix1X3().getZ());
}
@Override
public void Draw(Canvas canvas)
{
canvas.setMatrix(matrix);
canvas.drawBitmap(bitmap, src, dst, paint);
}
Draw (Canvas Canvas) всегда вызывается в ThreadView Thread,
и getAngle(int x, int z) или setDestination(double widthRatio, double heightRatio, Common_Math.Matrix1X4 focus) всегда вызывается перед методом Draw(Canvas canvas).