此问题已根据进度进行了修改,以备将来使用
我在ImageView
中有一张图片。它附近有一个旋转按钮。这就是它的作用:
imageView.animate().rotation(imageView.getRotation()+45);
然后我在更改后保存图像:
Bitmap bm = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
但是当我在更改后提取图像时,旧图像显示(未旋转):
rotatedImageView.setImageBitmap(bm);
如何在动画后将新图像作为Bitmap
获取?
修改
按照@Droid Chris的回答,这就是我得到的:
我将背景设置为黑色,以便您更好地理解。最终它将是透明的
在:
后:
观察:
@Droid克里斯的答案在我将图像旋转90的倍数时起作用。但例如45的倍数是有问题的......
我确实需要45岁但是
SOLUTION:
所以我使用了@Droid Chris的功能,但不知怎的,它是对我的图像进行下采样。所以我需要在xml中为android:scaleType="center"
设置ImageView
。这解决了下采样问题。
另外,为了保留过渡动画,我必须这样做:
imageView.animate().rotation(imageView.getRotation()+45);
每次旋转操作,以下只有一次我要保存它:
Bitmap oldBitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap().copy(((BitmapDrawable)imageView.getDrawable()).getBitmap().getConfig(), true);
Bitmap bitmapAfterRotation = getRotatedBitmap(oldBitmap,imageView.getRotation());
另外,在getRotatedBitmap()
中,我写了mat.setRotate(angle);
而不是mat.postRotate(angle);
现在它按预期工作。
答案 0 :(得分:0)
将矩阵应用于图像,这样就可以考虑旋转的角度,同时获得宽度和高度:
((BitmapDrawable)mUserProfileImageView.getDrawable()).getBounds().height()
or
((BitmapDrawable)mUserProfileImageView.getDrawable()).getBounds().width()
private Bitmap getRotatedBitmap(Bitmap bm, int angle, int width, int height) {
Matrix mat = new Matrix();
mat.postRotate(angle);
Bitmap newBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, mat, true);
bm.recycle();
return newBitmap;
}