2

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

4

3 回答 3

4

阿尔法组合的基本“方程式”是:

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

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

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

假设您在每一层上都有相同的图像,并且 layer1 是红色通道 (G1=B1=0) 并且 layer2 是绿色并且 layer3 是蓝色,您会得到:

(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 中),您可以做得更好。

于 2010-01-08T20:36:51.520 回答
0

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

如果对于某个像素,您的图像的红色值是 0.5,您可以将其与(典型)范围 [0,1] 中的 alpha 组合以形成任何值,最高(包括)0.5,但您不能去上面,得到例如 0.6 左右的输出值。

于 2010-01-08T20:25:45.413 回答
0

如果您希望创建 3 个图层,这些图层混合在一起叠加到原始图像中,这是很有可能的。这是一个 Python 脚本的链接,该脚本调用 Paint Shop Pro 中的函数来完成困难的部分。

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

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

于 2010-01-08T22:36:38.440 回答