Présentation
Dans le dossier "drawable-mdpi": une image de 556px par 556px nommée "b5"
Sur le main layout un ImageView dont la source est "b5"
But visé
Dessiner sur une image bitmap puis affecter celle-ci à l'imageview.
Problème
1.Code légèrement simplifié pour illustrer le probleme
Ça plante à la ligne "Canvas c = new Canvas(b);"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //creation d'un bitmap qui sera dessiné sur b5 Bitmap icone= BitmapFactory.decodeResource(getResources(), R.drawable.icon); //creation d'un bitmap temporaire avec b5 non modifié Bitmap b= BitmapFactory.decodeResource(getResources(), R.drawable.b5); Canvas c = new Canvas(b); //on dessine sur le canvas mTextpaint est créé..j'ai juste omis de copier le bout de code c.drawBitmap(icone,0,0,mTextPaint); //on affecte l'image a l'imageview BoardImage.setImageBitmap(b);
2.Si je déplace l'image b5 dans "drawable-hdpi" alors ça ne plante pas mais l'image est légèrement déformée (c'est normal)
3.Si je remplace la ligne de creation du bitmap par
Code : Sélectionner tout - Visualiser dans une fenêtre à part b=BoardImage.getDrawingCache();
Alors ça fonctionne...pourtant le BoardImage a bien "b5" dans mdpi comme source.
4.Finalement voici ma méthode temporaire peu élégante
Je crée un bitmap contenant "b5" (appelé "e")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Bitmap e = BitmapFactory.decodeResource(getResources(),R.drawable.b5); Bitmap b= Bitmap.createBitmap(556, 556, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); c.drawBitmap(e, 0, 0, mTextPaint); c.drawBitmap(icone,0,0,mTextPaint); BoardImage.setImageBitmap(b);
Je crée un bitmap vide (appelé "b")
Je crée un canvas pour "b"
Je dessine "e" sur le canvas
Je dessine "icone" sur le canvas.
J'affecte le tout a l'imageview
Bon ça marche mais je ne comprend pas pourquoi je ne peux pas affecter un canvas à un bitmap qui charge une image ressource qui se trouve dans"drawable-mdpi".
Partager