在Android中创建空位图并通过画布进行绘制

121

我想创建一个空的位图,然后将画布设置为该位图,并在位图上绘制任何形状。

2个回答

229

这可能比你想象的要简单:

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

这是有关该主题的官方文档:自定义绘图


如果我在一个单独的类中创建了它,我该如何在另一个类中引用这个位图呢?例如:Bitmap text = BitmapFactory.decodeResource(mContext.getResources(), 这里应该放什么?); 我需要在OpenGL实时壁纸中使用一个TextView。谢谢您的帮助。 - Steve C.
嗨@bigstones,我正在按照您的代码在onSizeChanged()中创建位图,但是当我创建位图时,我遇到了OutOfMemoryError,请参见此http://stackoverflow.com/questions/24303759/outofmemoryerror-when-creatingbitmp - user123456
如何在使用SurfaceView时在另一个线程中完成此操作? - Zach H
请确保x和y不为零,否则会抛出非法参数异常。 - Fazal Jarral
哇,这11年都没变化?! - bigstones

-5

不要使用Bitmap.Config.ARGB_8888

而是使用 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可能会导致内存不足问题。 或者更好的方法是,尽量避免使用ARGB选项本身。


14
ARGB_4444现已被弃用(http://developer.android.com/reference/android/graphics/Bitmap.Config.html#ARGB_4444)。 - Allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接