有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么我的污点图像算法会使图像变暗?

我正在尝试编写一个图形效果,其中一个圆圈在图像周围移动,在图像移动时将其弄脏(就像Gimp或Photoshop中的弄脏工具的工作方式)。我使用的基本算法是:

  1. 圆圈在位图上从位置A移动到位置B
  2. 将一个像素圈从位置a复制到临时位图中
  3. 使用大约50%的alpha从临时位图中画出这个像素圈到位置B

这很好,看起来就像我预期的那样,如果圆圈在图像上一次移动1个像素,图像看起来会变得模糊

我现在想给涂抹效果添加一些纹理。我有一个位图,其中包含一个颜料滴的图片。将上面的算法修改为以下内容,以使污迹呈现此颜料滴的形状:

  1. 一如既往
  2. 用paint blob纹理替换临时位图像素,然后将像素圈从位置A复制到临时位图中,但只保留与paint blob像素匹配的像素(即,在将圆绘制到临时位图中时使用Porter Duff“source in destination”模式)
  3. 一如既往

这几乎起作用了,一开始看起来还不错,但渐渐地,污渍使我的图像中的颜色变暗了!如果圆圈多次经过同一区域,颜色最终会变为黑色。知道我做错了什么吗

我已经在Android中实现了上述功能。我偶然发现了这篇关于Android中的位图(比如我的paint blob纹理)被加载“预乘alpha”的帖子,作者说这导致了他的图像变得更暗: http://www.kittehface.com/2010/06/安卓bitmap-and-premultiplied-alpha.html

我怀疑自己也遇到了类似的问题,但我不太明白发生了什么,也不知道如何解决它。有人知道可能发生了什么吗


共 (1) 个答案

  1. # 1 楼答案

    乍一看,图像变暗的原因是前三步中的#3。将一个像素以50%的比例叠加在现有像素上。您可能需要考虑使用原始像素值和新像素值的平均值。你可能想研究一些模糊算法