通过Alpha混合将ARBG转换为RGB

时间:2020-03-05 18:37:51  来源:igfitidea点击:

假设我们有一种ARGB颜色:

Color argb = Color.FromARGB(127, 69, 12, 255); //Light Urple.

当将其绘制在现有颜色之上时,这些颜色将混合。因此,当将其与白色混合时,结果颜色为" Color.FromARGB(255,162,133,255);"。

该解决方案应像这样工作:

Color blend = Color.White; 
Color argb = Color.FromARGB(127, 69, 12, 255); //Light Urple.      
Color rgb = ToRGB(argb, blend); //Same as Color.FromARGB(255, 162, 133, 255);

什么是" ToRGB"的实现?

解决方案

回答

这称为Alpha混合。

在伪代码中,假定背景色(混合色)始终具有255 alpha。还假设alpha为0-255.

alpha=argb.alpha()
r = (alpha/255)*argb.r() + (1 - alpha/255)*blend.r()
g = (alpha/255)*argb.g() + (1 - alpha/255)*blend.g()
b = (alpha/255)*argb.b() + (1 - alpha/255)*blend.b()

注意:根据语言,我们可能需要对浮点/整数数学和舍入问题稍加(更)小心。相应地铸造中间体

编辑添加:

如果我们没有alpha值为255的背景色,则代数会变得更加复杂。我之前已经做过,这是一个有趣的练习,留给读者(如果我们真的需要知道,请问另一个问题:)。

换句话说,什么颜色的C混合到某种背景中,就像混合A,然后混合B。这有点像计算A + B(与B + A不同)。

回答

我相信,如果我们不需要了解此预渲染,则可以始终使用getpixel的win32方法。

注意:在密苏里州中部的iPhone上键入,无法访问inet。将查找真实的win32示例,并查看是否有.net等效项。

如果有人在乎,并且不想使用上面发布的(优秀)答案,则可以通过此链接MSDN示例获取.Net中像素的颜色值。