2012-03-30 5 views
3

ich versuche, einen argb-Wert in einen rgb-Wert zu konvertieren, ohne die Informationen zu verlieren, die er von seinem Hintergrund erhalten hat. also zum beispiel: der hintergrund ist schwarz, der argb ist (150,255,0,0) und als ergebnis sollte ich eine art braun haben.ARGB in RGB umwandeln, ohne Informationen zu verlieren

Gibt es eine Chance, damit umzugehen?

Antwort

5

können Sie

foreground * alpha + background * (1-alpha) 

als neue Farbe für die Kanäle Rot, Grün und Blau berechnen. Beachten Sie, dass ich eine alpha skaliert auf 0 bis 1 im Ausdruck verwendet habe.

+0

Sie können mein Beispiel nehmen, es zu erklären? kann mir nicht vorstellen, wie ich 3 Werte aus dieser Gleichung herausholen sollte. danke – roqstr

+0

ziemlich genial, danke! – roqstr

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)); 
    } 

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

Verwandte Themen