Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 不在中间旋转 为什么位图不在中间旋转?_Android_Image Rotation - Fatal编程技术网

Android 不在中间旋转 为什么位图不在中间旋转?

Android 不在中间旋转 为什么位图不在中间旋转?,android,image-rotation,Android,Image Rotation,当我用sin旋转点的时候,因为这是可以的,用仿射变换在摇摆中旋转是有效的,但用矩阵旋转是不行的 我使用以下代码: matrix.reset(); matrix.setRotate(35.0f,middleofx,middleofy); Bitmap t=Bitmap.createBitmap(BI_auto); Bitmap rotatedBitmap = Bitmap.createBitmap(t, 0, 0, BI_car.getWidth(), BI

当我用sin旋转点的时候,因为这是可以的,用仿射变换在摇摆中旋转是有效的,但用矩阵旋转是不行的

我使用以下代码:

matrix.reset();    
  matrix.setRotate(35.0f,middleofx,middleofy);    
  Bitmap t=Bitmap.createBitmap(BI_auto);    
  Bitmap rotatedBitmap = Bitmap.createBitmap(t, 0, 0,
  BI_car.getWidth(), BI_car.getHeight(), matrix, true);`
点的旋转工作:

 sx = ((carx) + 45 - worldx);   
 sy = ((cary) + 45 - worldy);    
 float rad = (float) (grad / 180.0 * Math.PI);   
 float ex2 = (float) (sx + length* Math.sin(angle - rad));   
 float ey2 = (float) (sy + length* Math.cos(angle - rad));
红色和红色的点是正确的,但是绿色的汽车显示器是错误的,而不是在中间。 显示错误旋转的位图


我不确定java语法,但您应该像下面这样做

matrix.translate(-middleofx,-middleofy); // these might be positive.
matrix.setRotate(35.0f);
Bitmap t=Bitmap.createBitmap(BI_auto);
Bitmap rotatedBitmap = Bitmap.createBitmap(t, 0, 0, BI_car.getWidth(), BI_car.getHeight(), matrix, true);
matrix.translate(0,0);

旋转后的位图将比原始位图大,以不剪裁图像。您可以尝试绘制结果,以便中心坐标匹配