在调用getPixels()时,位图被视为不可变的

时间:2017-09-27 18:34:53

标签: android image bitmap

我有以下代码:

Bitmap mutableBitmap = result.bitmap.copy(Bitmap.Config.ARGB_8888, true);
Matrix matrix = new Matrix();
matrix.postRotate(-result.rotationDegrees);
Bitmap rotatedBitmap = Bitmap.createBitmap(mutableBitmap, 0, 0, mutableBitmap.getWidth(), mutableBitmap.getHeight(), matrix, true);
int[] intValues = new int[INPUT_SIZE*INPUT_SIZE];
rotatedBitmap.getPixels(intValues, 0, rotatedBitmap.getWidth(), 0, 0, rotatedBitmap.getWidth(), rotatedBitmap.getHeight());

调用IllegalStateException时,eraseColor方法中会抛出rotatedBitmap.getPixels,并且消息无法删除不可变位图。显然,mutableBitmaprotatedBitmap都是可变位图,这就是它们存在的原因,调试器也证实了这一点。为了完整起见,INPUT_SIZE是屏幕宽度,result是来自PhotoResult的{​​{1}}对象。

那为什么抛出这个异常?

1 个答案:

答案 0 :(得分:2)

我认为您的特定createBitmap方法不会创建可变位图:

https://developer.android.com/reference/android/graphics/Bitmap.html#createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean)

"从源位图的子集返回一个不可变的位图,由可选矩阵转换。"