Алгоритм перекраски изображения переднего плана и сохранения оттенков - PullRequest
0 голосов
/ 25 марта 2019

Я ищу алгоритм, который может сделать что-то вроде этого:

Repaint image foreground and keep shades

Алгоритм должен изменять цвет изображения с прозрачным фоном. Но он должен не только установить цвет как bitmap.SetPixel(x, y, newColor). вместо этого он должен уважать тени переднего плана.

В настоящее время я использую следующий алгоритм:

public static Image Foreground(this Image xImage, Color xColor)
{
    //FOREGROUND
    if (xImage == null) return null;
    Bitmap bitmap = new Bitmap(xImage);

    //LOOP PIXELS
    for (int x = 0; x < bitmap.Width; x++)
        for (int y = 0; y < bitmap.Height; y++)
            if (bitmap.GetPixel(x, y).A != 0)
            {
                Color color = bitmap.GetPixel(x, y);
                int a = color.A;
                int r = Math.Abs(xColor.R - color.R);
                int g = Math.Abs(xColor.G - color.G);
                int b = Math.Abs(xColor.B - color.B);
                bitmap.SetPixel(x, y, Color.FromArgb(a, r, g, b));
            }

    return bitmap;
}

Хорошо работает, если перекрасить с черного на белый. Но если перекрасить с белого на оранжевый, это не сработает.

Есть ли лучшее решение?

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