Créer un bitmap vide et dessiner via un canevas sous Android

106

Je voudrais créer un bitmap vide et définir une toile sur ce bitmap, puis dessiner n'importe quelle forme sur le bitmap.

Sunil Pandey
la source

Réponses:

197

C'est probablement plus simple que vous ne le pensez:

int w = WIDTH_PX, h = HEIGHT_PX;

Bitmap.Config conf = Bitmap.Config.ARGB_8888; // see other conf types
Bitmap bmp = Bitmap.createBitmap(w, h, conf); // this creates a MUTABLE bitmap
Canvas canvas = new Canvas(bmp);

// ready to draw on that bitmap through that canvas

Voici une série de tutoriels que j'ai trouvés sur le sujet: Dessiner avec la série Canvas

grosses pierres
la source
Si je crée cela dans une classe séparée, comment référencerais-je le bitmap dans une autre classe. Par exemple: Bitmap text = BitmapFactory.decodeResource (mContext.getResources (), Que mettre ici?); J'ai besoin d'un textView dans un fond d'écran en direct opengl. Merci d'avance
Steve C.
Salut @bigstones Je suis votre code pour créer un bitmap dans onSizeChanged () lorsque je crée un bitmap Je reçois OutOfMemoryError s'il vous plaît voir ce stackoverflow.com/questions/24303759
...
Comment cela peut-il être fait dans un autre thread tout en utilisant SurfaceView?
Zach H
-3

N'utilisez pas Bitmap.Config.ARGB_8888

Utilisez plutôt int w = WIDTH_PX, h = HEIGHT_PX;

Bitmap.Config conf = Bitmap.Config.ARGB_4444; // see other conf types
Bitmap bmp = Bitmap.createBitmap(w, h, conf); // this creates a MUTABLE bitmap
Canvas canvas = new Canvas(bmp);

// ready to draw on that bitmap through that canvas

ARGB_8888 peut vous poser des problèmes d'OutOfMemory lorsque vous traitez plus de bitmaps ou de gros bitmaps. Ou mieux encore, essayez d'éviter l'utilisation de l'option ARGB elle-même.

user2903200
la source
12
ARGB_4444 est désormais obsolète ( developer.android.com/reference/android/graphics/… )
Allen