我尝试使用Matrix旋转位图,如果角度为90度而不是90度,位图位置会发生变化,它的工作正常。
代码段:
Matrix matrix = new Matrix();
matrix.postRotate(90);
Bitmap map= Bitmap.createBitmap(resizedBitmap, 0, 0,resizedBitmap.getWidth(), resizedBitmap.getHeight(),matrix, true);
你能告诉我如何在不改变图像位置的情况下旋转图像吗?
感谢。
答案 0 :(得分:2)
如果您使用的是ImageView,我会建议为ImageView设置矩阵,而不是每次都像这样创建一个新的位图
Matrix matrix=new Matrix();
img.setScaleType(ScaleType.MATRIX);
int height = img.arrow.getHeight();
int width = img.arrow.getWidth();
matrix.postRotate((float) angle, width/2,height/2);
img.setImageMatrix(matrix);
答案 1 :(得分:0)
这是唯一一个为我工作的人
private Bitmap rotateBitmap(Bitmap bitmap, int rotationAngleDegree){
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int newW=w, newH=h;
if (rotationAngleDegree==90 || rotationAngleDegree==270){
newW = h;
newH = w;
}
Bitmap rotatedBitmap = Bitmap.createBitmap(newW,newH, bitmap.getConfig());
Canvas canvas = new Canvas(rotatedBitmap);
Rect rect = new Rect(0,0,newW, newH);
Matrix matrix = new Matrix();
float px = rect.exactCenterX();
float py = rect.exactCenterY();
matrix.postTranslate(-bitmap.getWidth()/2, -bitmap.getHeight()/2);
matrix.postRotate(rotationAngleDegree);
matrix.postTranslate(px, py);
canvas.drawBitmap(bitmap, matrix, new Paint( Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG | Paint.FILTER_BITMAP_FLAG ));
matrix.reset();
return rotatedBitmap;
}