1
我有一个输入图像看起来像这样:给定背景和前景色,如何计算图像中它们之间的混合量?
正如你所看到的,这是一个蓝色的色调,并在粉红色背景的恢复窗口图标。
有一些像素是两种颜色的混合我想计算的数量,但不知道如何。给出100%背景和100%前景色。
最后,我想创建的α位图,其中每个像素的RGB量是前景色RGB,但alpha通道是混合量:
我有一个输入图像看起来像这样:给定背景和前景色,如何计算图像中它们之间的混合量?
正如你所看到的,这是一个蓝色的色调,并在粉红色背景的恢复窗口图标。
有一些像素是两种颜色的混合我想计算的数量,但不知道如何。给出100%背景和100%前景色。
最后,我想创建的α位图,其中每个像素的RGB量是前景色RGB,但alpha通道是混合量:
我找到答案(我自己)在与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));
}
如果你不知道,如果前景和背景颜色真的可以混合导致输入色彩,一定要夹紧阿尔法值之间说谎0.0和1.0。