2

在 Photoshop 中,您可以将图层的混合模式设置为“色调”。例如,如果该层用蓝色填充,那么它似乎会采用下面的层并将其全部变为蓝色,只要存在非白色的颜色。

我想知道它实际上在做什么。如果我有一个带有像素 aarrggbb 的背景图层,并且其顶部的图层设置为混合模式“Hue”,并且该图层上有一个像素 aarrggbb,那么这两个值如何组合以给出我们看到的结果?

它不只是从下面的图层中删除 rrggbb。如果这样做,它也会变成白色和黑色。它也不允许颜色变化通过。

如果背景像素是 0xff00ff00 并且相应的色调层像素是 0xff0000ff,那么我假设最终结果将只是 0xff0000ff,因为 ff 蓝色取代了 ff 绿色。但是,如果背景像素是 0x55112233,色相层像素是 0xff0000ff,那么它是如何得出它得出的蓝色阴影的呢?

我问的原因是我想在我的应用程序中拍摄各种图像并以编程方式更改图像的色调。与其存储具有不同颜色的同一图像的 8 个不同版本,不如存储一张图像并根据需要对其进行着色。

4

2 回答 2

0

我在这里找到了一种将 RGB 转换为 HSV 的算法: http ://www.cs.rit.edu/~ncs/color/t_convert.html

当然,在该页面的底部它提到 Java Color 对象已经具有在 RGB 和 HSV 之间转换的方法,所以我只是使用了它。

于 2012-06-20T06:06:17.970 回答
0

我一直在研究一种在 javascript/canvas 中复制该混合模式的方法,但我只提出了“着色”过滤器/混合模式。(以下示例)

着色算法:

  1. 将颜色从 RGB 转换为 HSL;
  2. 将色调值更改为想要的值(在我的情况下为 172⁰ 或 0.477);
  3. 将更新 HSL 还原为 RGB

注意:我发现这在台式机上没问题,但在智能手机上却明显很慢。

通过比较这三个图像,您可以看到差异。原来的:

原始图像

着色:

我的算法结果

Fireworks 的“混合色调”算法(我认为与 Photoshop 的相同):

烟花

colorize 过滤器可能是一个很好的替代品。

RGB/HSL转换问题

维基百科上的色相/色度和 HSL

于 2013-01-21T02:35:49.100 回答