基本上,我有一个上下文,我无法以编程方式对图像进行着色,尽管我可以更改它的 alpha 值。通过一些实验,我发现我可以使用特定的 alpha 值对图像的红色、蓝色和绿色版本进行分层,以产生各种颜色。但是我想知道是否可以通过这种方法实现真正​​的RGB表示?如果是这样,将 RGB 值转换为红色、蓝色和绿色层的不同 alpha 值的公式是什么?

有帮助吗?

解决方案

alpha组合的基本“方程”是:

alpha * (R1,G1,B1) + (1-alpha) * (R2,G2,B2)

当你有 3 个带有 alpha 的图层时,你实际上是在组合 4 个图层(第 4 个是黑色),所以最终的颜色是:

alpha1 * (R1,G1,B1) + (1-alpha1) * ( 
   alpha2 * (R2,G2,B2) + (1-alpha2) * (
      alpha3 * (R3,G3,B3) + (1-alpha2) * (0,0,0) ) )

假设每个图层上都有相同的图像,并且图层 1 是红色通道 (G1=B1=0),图层 2 是绿色,图层 3 是蓝色,你会得到:

(alpha1 * R, (1-alpha1)*alpha2 * G, (1-alpha1)*(1-alpha2)*alpha3 * B)

对于白色像素,您可以使用任何可能的颜色。对于黑色像素,除了黑色之外你什么也做不了。对于任何其他像素,您都会受到 R、G 和 B 值的限制。

假设您想在当前颜色为 (R, G, B) 的像素处实现 (Rd, Gd, Bd),那么您必须选择:

alpha1 = Rd/R
alpha2 = Gd/(G*(1-alpha1))
alpha3 = Bd/(B*(1-alpha1)*(1-alpha2))

问题是 alpha 通常只能在 0 到 1 之间。因此,例如,如果 Rd > R,则您无能为力。

如果您可以控制混合功能(例如在 Photoshop 中),您可以做得更好。

其他提示

如果我理解正确的话,我认为这是不可能的。

如果对于某个像素,图像的红色值为 0.5,则可以将其与(典型)范围 [0,1] 中的 alpha 结合起来,形成 0.5 以内(含 0.5)的任何值,但不能去上面,得到例如输出值0.6左右。

如果您想要创建 3 个图层,将它们混合在一起形成原始图像,这是完全有可能的。下面是一个 Python 脚本的链接,该脚本调用 Paint Shop Pro 中的函数来完成困难的部分。

http://pixelnook.home.comcast.net/~pixelnook/SplitToRGB.htm

如果您需要更多详细信息,请发表评论,我稍后会尽力填写。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top