Erstellen einer leeren Bitmap und Zeichnen durch Leinwand in Android

105

Ich möchte eine leere Bitmap erstellen und eine Zeichenfläche für diese Bitmap festlegen und dann eine beliebige Form auf die Bitmap zeichnen.

Sunil Pandey
quelle

Antworten:

196

Dies ist wahrscheinlich einfacher als Sie denken:

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

Hier ist eine Reihe von Tutorials, die ich zum Thema gefunden habe: Zeichnen mit Canvas-Serien

Bigstones
quelle
Wenn ich das in einer separaten Klasse erstelle, wie würde ich dann auf die Bitmap in einer anderen Klasse verweisen? Zum Beispiel: Bitmap text = BitmapFactory.decodeResource (mContext.getResources (), Was soll hier eingefügt werden?); Ich benötige eine Textansicht in einem OpenGL-Live-Hintergrund. Vielen Dank im Voraus
Steve C.
Hallo @bigstones, ich folge Ihrem Code zum Erstellen einer Bitmap in onSizeChanged (), wenn ich eine Bitmap erstelle. Ich erhalte OutOfMemoryError.
Weitere
Wie kann dies in einem anderen Thread bei Verwendung von SurfaceView durchgeführt werden?
Zach H
-3

Verwenden Sie Bitmap.Config.ARGB_8888 nicht

Verwenden Sie stattdessen 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 kann Sie in OutOfMemory-Probleme bringen, wenn Sie mit mehr Bitmaps oder großen Bitmaps arbeiten. Oder noch besser: Vermeiden Sie die Verwendung der ARGB-Option.

user2903200
quelle
12
ARGB_4444 ist jetzt veraltet ( developer.android.com/reference/android/graphics/… )
Allen