Конвертировать ARGB в RGB без потери информации - PullRequest
6 голосов
/ 30 марта 2012

Я пытаюсь преобразовать значение argb в значение rgb, не теряя информацию, полученную из его фона.так, например: фон черный, argb (150,255,0,0), и в результате у меня не будет коричневого цвета.

есть ли шанс с этим справиться?

Ответы [ 2 ]

7 голосов
/ 30 марта 2012

Вы можете рассчитать

foreground * alpha + background * (1-alpha)

как ваш новый цвет для каналов красный, зеленый и синий.Обратите внимание, что в выражении я использовал alpha с масштабом от 0 до 1.

6 голосов
/ 31 марта 2012
    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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...