2012-03-30 32 views
3

我嘗試將argb值轉換爲rgb值,而不會丟失從其背景獲得的信息。例如: 例如:背景是黑色的,argb是(150,255,0,0),結果我不想有一種棕色。將ARGB轉換爲RGB而不丟失信息

有沒有處理這個問題的機會?

回答

5

您可以計算

foreground * alpha + background * (1-alpha) 

爲渠道紅色,綠色和藍色的新顏色。請注意,我在表達式中使用了一個縮放到01alpha

+0

你可以拿我的例子來解釋呢?無法想象我應該如何從這個等式中得到3個數值。謝謝 – roqstr 2012-03-30 16:52:33

+0

非常棒,謝謝! – roqstr 2012-03-30 17:00:56

6
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

相關問題