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

Colors Alpha混合红色、蓝色和绿色图像以生成着色为任何rgb值的图像?,colors,rgb,formula,alpha,color-blending,Colors,Rgb,Formula,Alpha,Color Blending,基本上,我有一个无法编程着色图像的上下文,尽管我可以更改它的alpha值。通过一些实验,我发现我可以用特定的alpha值对图像的红、蓝、绿版本进行分层,以产生各种颜色。然而,我想知道是否有可能通过这种方法实现真正的RGB表示?如果是,将RGB值转换为红色、蓝色和绿色层的不同alpha值的公式是什么 如果我理解正确的话,我认为这是不可能的 如果,对于某个像素,图像的红色值是,比如说,0.5,则可以将其与(典型)范围[0,1]中的alpha组合,形成小于等于0.5的任何值,但不能超过0.6,以获得例

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

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

如果,对于某个像素,图像的红色值是,比如说,0.5,则可以将其与(典型)范围[0,1]中的alpha组合,形成小于等于0.5的任何值,但不能超过0.6,以获得例如0.6左右的输出值。

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

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) ) )
如果您在每个图层上都有相同的图像,图层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中),您可以做得更好。

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


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

那么,使用该公式,我将如何从我想要实现的单个RGB值中导出alpha1、alpha2和alpha3?如果R=0xAA,那么alpha1=0xAA/0xFF会吗?我已经编辑了我的答案。如果你认为这是一个很好的答案,请考虑一下投票/检查。我在PS图象处理软件上试验3层圈,并插入值。这些圆是彩色的r:0xff0000 g:0x00ff00 b:0x0000ff如果我想获得颜色值0xaa5588,您的公式给出的alpha值分别为.69、.32、.78。然而,无论是在黑色或白色背景上,这些分层都不能产生正确的颜色。这基本上就是我试图实现的情景。我还试着从3个目标值(0x55)中减去最低的一个,然后在0xFF上使用这些新值,这会更接近,但不太接近。有什么想法吗?我在推导中犯了一个错误,希望现在能更正。这也意味着你可以获得的颜色范围大大缩小。要实现0xaa5588,值应为:0.66,1,无穷大。换句话说,你不能这样做。请注意,这取决于顺序。如果你按另一个顺序分层:先绿色,然后蓝色,然后红色,你需要的alpha是:0.33,0.8,5.0。不幸的是,你还是做不到。