2010-09-23 100 views
0

我有一個簡單的繪圖應用程序的原型。當用戶在屏幕上拖動手指時,我沿途記錄點並在它們之間畫出一系列線條。換句話說,繪圖是「路徑」列表,每個路徑都是要連接的點列表。這很容易,它的工作,它的效率。如何在簡單的繪圖應用程序中實現橡皮擦工具?

問題是我想實現一個橡皮擦工具。在普通的位圖編輯器中,橡皮擦只是擦除像素,但在我的繪圖中沒有要擦除的像素 - 通過撫摸路徑動態創建所有像素。我可以通過使用背景顏色「繪圖」來完成簡單的橡皮擦,覆蓋已經繪製的路徑。但我想畫一個帶紋理的背景,所以這是一個不行。

你會如何做到這一點? (缺少將繪圖表示爲位圖,其中橡皮擦簡單的顯而易見的解決方案)。

回答

2

您不能實現傳統意義上的橡皮擦;你所描述的記錄路徑和動態繪製它們是矢量圖形。橡皮擦的概念來自光柵圖形(基本上是一個位圖)。對於矢量圖形,用戶通常選擇要刪除的項目或項目區域。

如果你真的想這樣做,你基本上必須在圖形中的所有路徑和橡皮擦的矩形(或任何形狀)之間進行碰撞檢測。當發生接觸時,您必須使用與橡皮擦和交叉點接觸的線的斜率來切割橡皮擦兩側的碰撞圖形對象。

1

您可能可以找到現有路徑與已刪除區域的交集,將現有路徑分開並在交集處創建新點(這將成爲新分割路徑的開始/結束點)。

+0

對不起,我剛剛意識到這是@Adam Robinson在後半部分所說的他的回答。 – 2010-09-23 15:43:35

1

我可以 「繪圖」使用的背景顏色, 覆蓋在已經畫的路徑做一個簡單的橡皮擦。 但我想借鑑一個紋理 的背景,所以這是一個不行。

難道你不能通過繪製「橡皮擦」,除非你不使用單一顏色,而是整個背景作爲顏色。我的意思是,對於一個給定的擦除路徑,你逐一採用每個像素,並使用相同像素座標的背景顏色對其進行着色