Criar um bitmap vazio e desenhar através da tela no Android

106

Gostaria de criar um bitmap vazio e definir uma tela para esse bitmap e, em seguida, desenhar qualquer forma no bitmap.

Sunil Pandey
fonte

Respostas:

197

Isso provavelmente é mais simples do que você está pensando:

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

Aqui está uma série de tutoriais que encontrei sobre o tema: Desenhando com a série Canvas

bigstones
fonte
Se eu criar isso em uma classe separada, como faria referência ao bitmap em outra classe. Por exemplo: Bitmap text = BitmapFactory.decodeResource (mContext.getResources (), O que colocar aqui?); Eu preciso de um textView em um papel de parede ao vivo opengl. Agradecemos antecipadamente
Steve C.
Olá @bigstones, estou seguindo seu código para criar bitmap em onSizeChanged (), quando estou criando bitmap estou recebendo OutOfMemoryError, consulte este stackoverflow.com/questions/24303759/…
user123456
Como isso pode ser feito em outro segmento durante o uso de SurfaceView?
Zach H
-3

Não use Bitmap.Config.ARGB_8888

Em vez disso, use 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 pode levar você a problemas de OutOfMemory ao lidar com mais bitmaps ou bitmaps grandes. Ou melhor ainda, tente evitar o uso da opção ARGB em si.

user2903200
fonte
12
ARGB_4444 está obsoleto agora ( developer.android.com/reference/android/graphics/… )
Allen