OpenGLRenderer : Cannot generate texture from bitmap
Bonjour,
Je dois réaliser un traitement sur une image donnée.
Comme ce dernier est assez lourd, je le délègue à une Asynctask .
Cette image est chargée, affichée dans une ImageView puis passé en paramètre à l'asyncTask qui s'execute ensuite. Tout cela se fait dans dans le OnCreate de l'activité.
Pour faire patienter l'utilisateur (le calcul peu prendre une dizaine de secondes), l'image est rafraichie à diverse étapes en appelant la méthode postInvalidate de l'imageView . Enfin, j'appel invalidate dans onPostExecute.
Le problème est que de temps en temps (ça ne le fait pas à chaque fois) la console m'affiche l'erreur suivante : OpenGLRenderer : Cannot generate texture from bitmap.
Cela à pour effet de ne pas rafraichir l'image et il est ensuite impossible de la rafraichir à nouveau.
Je n'arrive pas à trouver la source de l'erreur, car le problème se produit assez aléatoirement, la plupart du temps ca marche, parfois seule une bande de l'image est "perdue" et plus rarement, l'imageView reste entièrement noire.
Cette erreur se produit sur l'émulateur et sur une tablette nexus10, qui tournent tous deux sous jelly beans
Voici le code simplifié de l'asynTask
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public class MappingTask extends AsyncTask<Void, Void, Void> {
private Bitmap picture;
private ImageView view;
public MappingTask(Bitmap image, ImageView view) {
this.view = view;
picture = image;
}
@Override
protected Void doInBackground(Void... unused) {
for (int x = 0; x < picture.getWidth(); x++) {
for (int y = 0; y < picture.getHeight(); y++) {
pixelColor = picture.getPixel(x, y);
//Calculs à partir de la couleur du pixel
picture.setPixel(x, y, newColor);
}
if(x%(50)==0)
view.postInvalidate();
}
return null;
}
@Override
protected void onPostExecute(Void unused) {
view.invalidate();
}
} |
J'ai essayé de rafraichir l'image avec la méthode invalidate utilisée dans onProgressUpdate() mais cela ne change rien. Le fait de ne pas rafraichir l'image durant sa modification fonctionne jusqu'à ce que je le fasse dans le onPostExecute qui produit la même erreur.
Avez vous une idée de la source du problème?
Merci d'avance pour vos réponses