我有一个简单绘图应用程序的原型。当用户在屏幕上拖动手指时,我会记录沿途的点并在它们之间绘制一系列线。换句话说,绘图是“路径”的列表,每个路径是要连接的点的列表。这很简单,有效且效率很高。
问题是我想要实现一个橡皮擦工具。在常规位图编辑器中,橡皮擦只是擦除像素,但在我的绘图中没有要擦除的像素 - 所有像素都是通过抚摸路径动态创建的。我可以通过使用背景颜色“绘制”来做一个简单的橡皮擦,覆盖已绘制的路径。但是我想画一个带纹理的背景,所以这是不行的。
你会怎么做? (没有明显的解决方案,将绘图表示为橡皮擦很简单的位图。)
答案 0 :(得分:2)
你无法实现传统意义上的橡皮擦;您描述的记录路径并动态绘制它们的是矢量图形。橡皮擦的概念来自光栅图形(基本上是位图)。使用矢量图形,用户通常选择要删除的项目或项目区域。
如果你真的想这样做,你基本上必须在图形中的所有路径和橡皮擦的矩形(或任何形状)之间进行碰撞检测。当发生接触时,您必须使用与橡皮擦和交叉点接触的线的斜率来切割橡皮擦两侧的碰撞图形对象。
答案 1 :(得分:1)
您可能会找到现有路径和已删除区域的交点,向上分割现有路径,并在交叉点创建新点(这将成为新拆分路径的起点/终点)。
答案 2 :(得分:1)
我可以做一个简单的橡皮擦 使用背景颜色“绘图”, 覆盖已绘制的路径。 但我想画一个纹理 背景,所以这是一个禁忌。
除了不使用单一颜色而是使用整个背景作为颜色之外,你不能通过绘画来做“橡皮擦”。我的意思是,对于给定的擦除路径,每个像素逐个采用并用相同像素的背景颜色对其进行着色