2010-11-11 27 views
8

我想弄清楚如何在android中的位图上绘制,并保留这些已更改位图的副本以用于撤消功能。如何在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? 

还是如何获取位图的绘制与画布(我想申请由画布绘制的更改以保持位图的栈)之后?也许我正在做这个完全错误的事情。

回答

17

使用new Canvas(Bitmap bitmap)提供一个CanvasBitmap将包含您的绘图操作的结果。

原来的Bitmap,你在Canvas上画的drawBitmap将永远不会被修改。

由你可能会在用户完成每一个操作后:

  • 保持在内存中完成
  • 保存中间结果的外部存储与Bitmap.compress

另一种方法在操作的列表可以使用LayerDrawable将连续的绘图操作堆叠在彼此之上。你可以想象允许用户禁用每个单独的操作。

+1

现在只是绘制了一堆基于用户触摸事件的圈子,但随着更多的圈子被绘制和保存在内存中,它显着减慢。这就是为什么我们希望通过将更改应用到位图来“保存”用户输入/操作,这样每次只绘制一个位图,而不是保存并绘制数千个圆。 – 2010-11-11 23:54:48

+0

因此,您可以在您的目标位图上使用Bitmap.copy(...),并使用Canvas.setBitmap()为画布提供生成的位图作为新的绘制参数。 – 2010-11-12 00:02:10