我正在尝试实现一种涂抹工具,就像您可以在 Gimp 或 Photoshop 中找到的那样。我尝试了很多变体,但它们都有问题。我尝试在图像上从位置 P1 到 P2 涂抹的基本方法是:
- 从 P1 复制当前画笔大小的矩形。
- 在 P2 处以低不透明度绘制此矩形。
它看起来不错,如预期的那样有污迹,但我遇到的主要问题是污迹似乎使事情变得更暗。特别是在使用小笔刷间距时,反复涂抹会使该区域变黑。关于我做错了什么或我可以看一些标准算法的任何建议?我看过 Gimp 源代码,但很难理解。
如果重要的话,我在移动设备(Android、Java)上工作,所以速度更快会更可取。
最佳答案
我怀疑您的算法不断地在彼此之上渲染您的矩形,可能会平均它们的值以获得下面的新颜色值。根据您程序的具体设置方式,我敢打赌,由于这种重复平均,RGB 值将变为 0x000000。这也解释了为什么更小的步长距离变黑得更快,因为更多的步长等同于更多的平均。我的换色器也遇到了类似的问题,该换色器反复模糊,边缘变黑。
有关创建您自己的涂抹工具的良好教程可在此处找到:https://web.archive.org/web/20100916174858/http://losingfight.com:80/blog/2007/09/04/how-to-implement-smudge-and-stamp-tools/
不幸的是,这些示例都在 Objective-C 中,但文本很好地解释了正在发生的事情。
希望这对您有所帮助。
关于java - 涂抹工具的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004463/