如何在简单的绘图应用程序中实现橡皮擦工具?

问题描述:

我有一个简单的绘图应用程序的原型。当用户在屏幕上拖动手指时,我沿途记录点并在它们之间画出一系列线条。换句话说,绘图是“路径”列表,每个路径都是要连接的点列表。这很容易,它的工作,它的效率。如何在简单的绘图应用程序中实现橡皮擦工具?

问题是我想实现一个橡皮擦工具。在普通的位图编辑器中,橡皮擦只是擦除像素,但在我的绘图中没有要擦除的像素 - 通过抚摸路径动态创建所有像素。我可以通过使用背景颜色“绘图”来完成简单的橡皮擦,覆盖已经绘制的路径。但我想画一个带纹理的背景,所以这是一个不行。

你会如何做到这一点? (缺少将绘图表示为位图,其中橡皮擦简单的显而易见的解决方案)。

您不能实现传统意义上的橡皮擦;你所描述的记录路径和动态绘制它们是矢量图形。橡皮擦的概念来自光栅图形(基本上是一个位图)。对于矢量图形,用户通常选择要删除的项目或项目区域。

如果你真的想这样做,你基本上必须在图形中的所有路径和橡皮擦的矩形(或任何形状)之间进行碰撞检测。当发生接触时,您必须使用与橡皮擦和交叉点接触的线的斜率来切割橡皮擦两侧的碰撞图形对象。

您可能可以找到现有路径与已删除区域的交集,将现有路径分开并在交集处创建新点(这将成为新分割路径的开始/结束点)。

+0

对不起,我刚刚意识到这是@Adam Robinson在后半部分所说的他的回答。 – 2010-09-23 15:43:35

我可以 “绘图”使用的背景颜色, 覆盖在已经画的路径做一个简单的橡皮擦。 但我想借鉴一个纹理 的背景,所以这是一个不行。

难道你不能通过绘制“橡皮擦”,除非你不使用单一颜色,而是整个背景作为颜色。我的意思是,对于一个给定的擦除路径,你逐一采用每个像素,并使用相同像素坐标的背景颜色对其进行着色