我的输入图像如下所示:
如您所见,它是一个恢复窗口图标,蓝色色调,背景为粉红色。
有些像素是我想要计算的两种颜色的混合,但不知道如何。给出了100%背景和100%前景色。
最后,我想创建一个alpha位图,其中每个像素的RGB量是前景色RGB,但alpha通道是混合量:
答案 0 :(得分:0)
在math.stackexchange与一些数学家讨论后,我找到了答案(我自己)。
请阅读我的回答there了解其背后的逻辑;在C#中,代码如下:
private static double GetMixAmount(Color fore, Color back, Color input)
{
double lengthForeToBack = GetLengthBetween3DVectors(fore, back);
double lengthForeToInput = GetLengthBetween3DVectors(fore, input);
return 1 / (lengthForeToBack / lengthForeToInput);
}
private static double GetLengthBetween3DVectors(Color a, Color b)
{
// Typical length between two 3-dimensional points - simply handle RGB as XYZ!
return Math.Sqrt(
Math.Pow(a.R - b.R, 2) + Math.Pow(a.G - b.G, 2) + Math.Pow(a.B - b.B, 2));
}
如果您不知道前景色和背景色是否真的可以混合以产生输入色,请确保将Alpha值钳位在0.0到1.0之间。