colors - Alpha 混合红色、蓝色和绿色图像以生成着色为任何 RGB 值的图像?

标签 colors rgb formula alpha color-blending

基本上,我有一个上下文,我无法以编程方式对图像进行着色,尽管我可以更改它的 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 是红色 channel (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 中),您可以做得更好。

关于colors - Alpha 混合红色、蓝色和绿色图像以生成着色为任何 RGB 值的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2030471/

相关文章:

C++ 截断错误?

java - 按钮监听器中的随机面板颜色仅有效一次

gnuplot - 如何从点文件内部为 gnuplot 中的每个点添加颜色

c++ - 更正 YUV422 到 RGB 的转换

Excel公式测量休息时间

css - 尝试根据容器自动计算导航按钮的宽度

java - Api 21 上的工具栏项 MaterialButton 中的颜色错误

android - 如何更改选项菜单点的颜色?

javascript - 使用 HTML 和 CSS 打印文本然后更改颜色

python - 在 python 3 问题中使用 PIL 的 RGB 值问题