【问题标题】:Why does my smudge image algorithm make the image darker?为什么我的涂抹图像算法会使图像变暗?
【发布时间】:2011-04-28 22:28:12
【问题描述】:

我正在尝试编写一个图形效果,其中一个圆圈围绕图像移动,随着图像的移动而涂抹图像(就像 Gimp 或 Photoshop 中涂抹工具的工作方式一样)。我使用的基本算法是:

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

这很好用,看起来就像我所期望的那样,如果圆圈在图像上一次移动 1 个像素,图像看起来会被弄脏。

我现在想为涂抹效果添加一些纹理。我有一个包含油漆斑点图片的位图。上面的算法被修改为以下,所以污迹采用了这个油漆斑点的形状:

  1. 和以前一样
  2. 用油漆斑点纹理替换临时位图像素,然后将像素圈从位置 A 复制到临时位图中,但只保留与油漆斑点像素匹配的像素(即使用 Porter-Duff“目标中的源”模式将圆圈绘制到临时位图中时)。
  3. 和以前一样

这几乎可以正常工作,最初看起来还不错,但逐渐弄脏会使我图像中的颜色变暗!如果圆圈多次经过同一区域,颜色最终会变为黑色。有什么想法我可能做错了吗?

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

我怀疑我遇到了类似的问题,但我不明白发生了什么,也不知道如何解决它。有没有人暗示可能会发生什么?

【问题讨论】:

    标签: java android graphics opengl-es


    【解决方案1】:

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

    【讨论】:

    • 我已经尝试搜索“涂抹算法”的变体,但没有得到任何与我正在做的事情有明显不同的东西。我明白你对像素值的意思。我可以使用其他 Porter-Duff 模式来计算平均值吗?我在 Android 中工作,每像素计算速度非常慢,所以我需要让图形库来完成这项艰苦的工作。
    • 我对 Android 图形库不够熟悉,无法推荐最好的方法。对不起
    • 它不会是特定于 Android 的。有什么标准的图形技巧你知道我可以试试吗?
    猜你喜欢
    • 2012-08-30
    • 2010-11-01
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 2018-02-15
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多