重新绘制图像前景并保持阴影的算法

时间:2019-03-25 10:30:04

标签: c# graphics

我正在寻找能够执行以下操作的算法:

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

如果从黑色重新绘制为白色,效果很好。但是,如果您从白色重新涂成橙色,效果不好。

有更好的解决方案吗?

0 个答案:

没有答案