【问题标题】:Convert ARGB to RGB without losing information在不丢失信息的情况下将 ARGB 转换为 RGB
【发布时间】:2012-04-14 09:18:22
【问题描述】:

我尝试将 argb 值转换为 rgb 值,而不会丢失从他的背景中获得的信息。 例如:背景是黑色,argb 是 (150,255,0,0),因此我不想有一种棕色。

有没有办法解决这个问题?

【问题讨论】:

    标签: c# windows-phone-7 colors


    【解决方案1】:

    你可以计算

    foreground * alpha + background * (1-alpha)
    

    作为红色、绿色和蓝色通道的新颜色。请注意,我在表达式中使用了alpha 缩放为01

    【讨论】:

    • 你可以拿我的例子来解释一下吗?无法想象我应该如何从这个等式中得到 3 个值。谢谢
    • 这是否适用于“预乘”和“直接”格式? (C# 中的 PixelFormat.Alpha 与 PixelFormat.PAlpha 对比)。我的猜测是 Premultiplied 意味着我们应该将第一个乘法与 alpha 分开?但这没有多大意义,因为每个通道都需要一个以上的字节(或短字节)来保存相同的数据......或者预乘格式只是这样做吗?
    【解决方案2】:
        public static Color RemoveAlpha(Color foreground, Color background)
        {
            if (foreground.A == 255)
                return foreground;
    
            var alpha = foreground.A / 255.0;
            var diff = 1.0 - alpha;
            return Color.FromArgb(255,
                (byte)(foreground.R * alpha + background.R * diff),
                (byte)(foreground.G * alpha + background.G * diff),
                (byte)(foreground.B * alpha + background.B * diff));
        }
    

    来自http://mytoolkit.codeplex.com/SourceControl/latest#Shared/Utilities/ColorUtility.cs

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 2020-01-11
      相关资源
      最近更新 更多