Я пытаюсь преобразовать значение argb в значение rgb, не теряя информацию, полученную из его фона.так, например: фон черный, argb (150,255,0,0), и в результате у меня не будет коричневого цвета.
есть ли шанс с этим справиться?
Вы можете рассчитать
foreground * alpha + background * (1-alpha)
как ваш новый цвет для каналов красный, зеленый и синий.Обратите внимание, что в выражении я использовал alpha с масштабом от 0 до 1.
alpha
0
1
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