2017-09-27 2 views
0

Je le code suivant:Bitmap est considérée comme immuable lorsque intitulant getPixels()

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()); 

Un IllegalStateException est jeté dans la méthode eraseColor avec le message ne peut pas effacer les bitmaps immuables quand rotatedBitmap.getPixels est appelé. De toute évidence, les deux mutableBitmap et rotatedBitmap sont bitmaps mutable, c'est pourquoi ils existent, et le débogueur le confirme également. Pour être complet, INPUT_SIZE est la largeur de l'écran et result est un objet PhotoResult de FotoApparat.

Alors, pourquoi cette exception est-elle levée?

Répondre

2

Je pense que votre méthode createBitmap spécifique ne crée pas une image bitmap mutable:

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

"Renvoie un bitmap immuable du sous-ensemble de l'image source, transformée par la matrice en option."

+0

Mais si c'est le cas: Pourquoi le débogueur me dirait-il que 'mIsMutable' est vrai pour' rotatedBitmap'? Pourquoi cela n'a-t-il pas fonctionné lorsque je l'ai essayé dans l'autre sens, par exemple: 'Bitmap rotatedBitmap = Bitmap.createBitmap (result.bitmap, 0, 0, result.bitmap.getWidth(), result.bitmap.getHeight(), matrice, vrai); ' ' Bitmap mutableBitmap = rotationBitmap.copy (Bitmap.Config.ARGB_8888, true); ' – thedjdoorn