2010-11-11 48 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