为什么我的污点图像算法会使图像变暗?
我正在尝试编写一个图形效果,其中一个圆圈在图像周围移动,在图像移动时将其弄脏(就像Gimp或Photoshop中的弄脏工具的工作方式)。我使用的基本算法是:
- 圆圈在位图上从位置A移动到位置B
- 将一个像素圈从位置a复制到临时位图中
- 使用大约50%的alpha从临时位图中画出这个像素圈到位置B李>
这很好,看起来就像我预期的那样,如果圆圈在图像上一次移动1个像素,图像看起来会变得模糊
我现在想给涂抹效果添加一些纹理。我有一个位图,其中包含一个颜料滴的图片。将上面的算法修改为以下内容,以使污迹呈现此颜料滴的形状:
- 一如既往
- 用paint blob纹理替换临时位图像素,然后将像素圈从位置A复制到临时位图中,但只保留与paint blob像素匹配的像素(即,在将圆绘制到临时位图中时使用Porter Duff“source in destination”模式)李>
- 一如既往
这几乎起作用了,一开始看起来还不错,但渐渐地,污渍使我的图像中的颜色变暗了!如果圆圈多次经过同一区域,颜色最终会变为黑色。知道我做错了什么吗
我已经在Android中实现了上述功能。我偶然发现了这篇关于Android中的位图(比如我的paint blob纹理)被加载“预乘alpha”的帖子,作者说这导致了他的图像变得更暗: http://www.kittehface.com/2010/06/安卓bitmap-and-premultiplied-alpha.html
我怀疑自己也遇到了类似的问题,但我不太明白发生了什么,也不知道如何解决它。有人知道可能发生了什么吗
# 1 楼答案
乍一看,图像变暗的原因是前三步中的#3。将一个像素以50%的比例叠加在现有像素上。您可能需要考虑使用原始像素值和新像素值的平均值。你可能想研究一些模糊算法