c# - 使用 alpha 混合将 ARBG 转换为 RGB

标签 c# colors

假设我们有一个 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 blending .

在伪代码中,假设背景颜色(混合)始终具有 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 不同)。

关于c# - 使用 alpha 混合将 ARBG 转换为 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780/

相关文章:

image-processing - 将 RGB 转换为灰度/强度

python - 如何使用 Pandas 为数据框中新添加的值着色?

c# - 动态更改 Asp.Net Core 中的连接字符串

c# - 如何在 Outlook 插件的功能区中实现回调方法?

c# - DirectoryInfo[] SearchOption.AllDirectories 不包括根目录?

c# - 查找数组或 XML 中值的频率 (C#)

c# - 仅显示 API 抓取数据后 90 天内的结果

html - 当我在我的 CSS 文件中将网页背景颜色设置为黑色(#000000)时,它在网络浏览器中显示为白色,这是为什么?

colors - 更改 Rubymine Rspec 颜色

r - 反转 col2rgb 和 rgb2hsv