如何解决带有 Java BufferedImage 的图像过滤器:如何更改所有像素的颜色,直到它们收敛到一个全灰度图像
我有一个起始的 BufferedImage(下图中的(a))。我不知道如何调用这个过滤器,但我需要将所有图 (a) 像素从 (b) 逐渐转换为 (c),直到它们都变成灰色 (d)。我怎样才能做到这一点?谢谢!
解决方法
看起来可以通过线性插值来实现。我不会深入研究代码的细节,只是给你一个算法,让你走上正轨。
假设颜色表示为范围为 [0,1] 的 RGB 浮点值。所以 (0.0,0.0,0.0)
表示 0% 红色、0% 蓝色和 0% 绿色; (0.5,0.4,0.3)
表示 50% 的红色、40% 的蓝色和 30% 的绿色。如果您的颜色在 [0,255] 范围内,则效果应该相同。我更喜欢 [0,1] 范围,因为它对某些着色器效果更好。你总是可以除以 255 使它们进入 [0,1] 范围,最后乘以 255 使它们回到原始范围。
您有两个图像:基本图像(我们称之为 Source
)和完全不透明的后期处理效果(在本例中为纯灰色,我们称之为 Target
)。
要在它们之间进行线性插值,您只需将它们的两个 RGB 值相加,加权系数随时间从 0 到 1(源)和 1 到 0(目标),因此两个 RGB 值的总和永远不会超过各自通道的颜色范围。
以你的例子:
- 对于 a),您可以使用
RGB(Source) * 1.0 + RGB(Target) * 0.0
- 对于 b),您将使用
RGB(Source) * 0.667 + RGB(Target) * 0.333
- 对于 c),您将使用
RGB(Source) * 0.333 + RGB(Target) * 0.667
- 对于 d),您将使用
RGB(Source) * 0.0 + RGB(Target) * 1.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。