как узнать, является ли метафайл монохромным или цветным?

Есть ли способ узнать, является ли файл EMF только черно-белым или имеет какой-то цвет? Вы можете проверить цветовую палитру или как-то иначе?. Кто-нибудь, кто может помочь мне с кодом, пожалуйста? Мне нужно знать процент цветов каждого файла, сгенерированного программой, но только если он не монохроматичен, и я не хочу делать попиксельный подсчет всех файлов. Спасибо


person user3799564    schedule 12.01.2015    source источник
comment
Вы пробовали читать спецификацию? msdn.microsoft.com/en-us/library/cc250370.aspx   -  person MarcinJuraszek    schedule 12.01.2015
comment
Может ли stackoverflow.com/a/9557852/30594 дать вам дополнительные указания?   -  person Ramesh    schedule 12.01.2015


Ответы (1)


Если вы используете WinForms, это легко сделать:

Сначала загрузите файл EMF в растровое изображение:

Image img = new Metafile(@"MyFile.emf");
var bmp = new Bitmap(img);

Затем вы можете проверить его цвет с помощью этой функции:

bool isColor = IsColor(bmp);

private bool IsColor(Bitmap bmp)
{
    for (int x = 0; x < bmp.Width - 1; x++)
    {
        for (int y = 0; y < bmp.Height - 1; y++)
        {
            Color c = bmp.GetPixel(x, y);
            if (!(c.R == c.B && c.R == c.G))
                return true;
        }
    }

    return false;
}

В основном это тестирование каждого пикселя. Если файл черно-белый или черно-белый, то значения RGB данного пикселя будут установлены на одно и то же значение. Если какой-либо из пикселей не имеет одинаковых значений RGB, то он должен быть цветным.

person Icemanind    schedule 12.01.2015
comment
и не хочется делать попиксельный подсчет всех файлов - person user3799564; 12.02.2015