Tworzenie pustej mapy bitowej i rysowanie za pomocą kanwy w systemie Android

106

Chciałbym utworzyć pustą bitmapę i ustawić płótno na tę bitmapę, a następnie narysować dowolny kształt na mapie bitowej.

Sunil Pandey
źródło

Odpowiedzi:

197

To prawdopodobnie prostsze, niż myślisz:

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

Oto seria samouczków, które znalazłem na ten temat: Rysowanie za pomocą serii Canvas

wielkie kamienie
źródło
Jeśli utworzę to w osobnej klasie, w jaki sposób miałbym odwołać się do mapy bitowej w innej klasie. Na przykład: Bitmap text = BitmapFactory.decodeResource (mContext.getResources (), Co tu wstawić?); Potrzebuję TextView w animowanej tapecie OpenGL. Z góry dziękuję
Steve C.
Cześć @bigstones Śledzę twój kod do tworzenia bitmapy w onSizeChanged () kiedy tworzę bitmapę Otrzymuję OutOfMemoryError, zobacz ten stackoverflow.com/questions/24303759/ ...
user123456
Jak można to zrobić w innym wątku podczas korzystania z SurfaceView?
Zach H
-3

Nie używaj Bitmap.Config.ARGB_8888

Zamiast tego użyj 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 może spowodować problemy z OutOfMemory, gdy masz do czynienia z większą liczbą bitmap lub dużymi bitmapami. Lub jeszcze lepiej, spróbuj unikać używania samej opcji ARGB.

user2903200
źródło
12
ARGB_4444 jest teraz przestarzałe ( developer.android.com/reference/android/graphics/… )
Allen