如何在安卓系统中绘制位图?

14

我试图弄清如何在Android上绘制位图,并保留这些更改的位图的副本以用于撤消功能。

Bitmap b = ...
Paint p = new Paint();
canvas.drawBitmap(b, new Matrix(), null);
canvas.drawCircle(0,0,20,20);
//does Bitmap b have the circle drawn on it next time?

或者说我如何在使用画布绘制后获取位图(我想保留一组由画布绘制应用的更改的位图)?也许我完全错了。

2个回答

23

使用new Canvas(Bitmap bitmap)创建一个Canvas对象,并以一个包含你的绘图操作结果的Bitmap作为参数。

你用drawBitmapCanvas上绘制的原始Bitmap将不会被修改。

用户完成每项操作后,你可以:

  • 在内存中保存操作列表
  • 使用Bitmap.compress将中间结果保存到外部存储器

另一种方法是使用LayerDrawable堆叠连续的绘图操作。你可以考虑允许用户禁用每个单独的操作。


1
现在我们只是根据用户触摸事件绘制一堆圆圈,但随着越来越多的圆圈被绘制并保存在内存中,速度会显著变慢。这就是为什么我们正在寻求通过将更改应用于位图来“保存”用户输入/操作,这样每次只需绘制一个位图,而不是保存和绘制成千上万个圆圈。 - Scott K
你可以在目标 Bitmap 上使用 Bitmap.copy(...),并将结果 Bitmap 提供给 Canvas 作为新的绘图目标,使用 Canvas.setBitmap()。 - Kevin Gaudin

0

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