C# Удалить цвет с помощью графики

Я ищу, чтобы удалить все цвета из WMF файл изображения только 1 цвет.

Metafile img = new Metafile(path + strFilename + ".wmf");
float planScale = 0.06615f;
float scale = 1200f / (float)img.Width;
planScale = planScale / scale; ;
float widht = img.Width * scale;
float height = img.Height * scale;
using (var target = new Bitmap((int)widht, (int)height))
{
    using (var g = Graphics.FromImage(target))
    {
        g.DrawImage(img, 0, 0, (int)widht, (int)height);
        target.Save("image.png", ImageFormat.Png);
    }
}

На данный момент я загружаю WMF файл, установите масштаб и сохраните его как PNG файл.

Пример результата PNG:

Но теперь мне нужно удалить все цвета (зеленый, фиолетовый....) и установить только 1 цвет, например, серый.

1 ответ

Решение

Если фон всегда белый, вы можете сделать что-то подобное. Вы можете изменить 200 на то, что вы хотите, чтобы настроить цвет, который не должен быть изменен. В этом примере белый цвет не изменяется. Если вы не хотите рисовать черным, вы можете настроить цвет на target.SetPixel(x,y,Color.Black);

Metafile img = new Metafile("D:\\Chrysanthemum.wmf");
float planScale = 0.06615f;
float scale = 1200f / (float)img.Width;
planScale = planScale / scale; ;
float widht = img.Width * scale;
float height = img.Height * scale;
using (var target = new Bitmap((int)widht, (int)height))
{
    using (var g = Graphics.FromImage(target))
    {
        g.DrawImage(img, 0, 0, (int)widht, (int)height);
    }

    for (int x = 0; x < target.Width; x++)
    {
        for (int y = 0; y < target.Height; y++)
        {
            Color white = target.GetPixel(x, y);
            if ((int)white.R > 200 || (int)white.G > 200 || (int)white.B > 200)
            {
                target.SetPixel(x, y, Color.Black);
            }
        }
    }

target.Save("D:\\image.png", ImageFormat.Png);
}

Изображение WMF: введите описание изображения здесь

PNG изображение: введите описание изображения здесь

Я надеюсь, что это то, что вы ищете.

Другие вопросы по тегам