Как идентифицировать изображения CMYK в ASP.NET с помощью C #

Кто-нибудь знает, как правильно идентифицировать изображения CMYK в ASP.NET с помощью C #? Когда я проверяю атрибут Flags экземпляра Bitmap , я получаю неверные результаты.

Я создал три изображения, чтобы проверить это: cmyk.jpg, rgb.jpg и серый. jpg. Это соответственно изображения CMYK, RGB и оттенков серого.

Это мой тестовый код:

static void Main(string[] args)
{
    Bitmap bmpCMYK = new Bitmap("cmyk.jpg");
    Bitmap bmpRGB = new Bitmap("rgb.jpg");
    Bitmap bmpGray = new Bitmap("gray.jpg");

    Console.WriteLine("\t\tRgb\tCmyk\tGray\tYcbcr\tYcck\tPixelFormat");

    Console.WriteLine("cmyk.jpg\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
        bmpCMYK.PixelFormat);

    Console.WriteLine("rgb.jpg\t\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
        bmpRGB.PixelFormat);

    Console.WriteLine("gray.jpg\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
        bmpGray.PixelFormat);

    bmpCMYK.Dispose();
    bmpRGB.Dispose();
    bmpGray.Dispose();

    Console.ReadLine();
}

private static bool IsSet(Bitmap bitmap, System.Drawing.Imaging.ImageFlags flag)
{
    return (bitmap.Flags & (int)flag) == (int)flag;
}

Это дает следующий результат: Test results

Я проверил фактические изображения, и cmyk.jpg действительно является изображением CMYK.

Очевидно, это «известная проблема». У Алекса Гила была такая же проблема в WPF (см. Этот вопрос: Как идентифицировать изображения CMYK с помощью C # ), и ему удалось решить ее, используя класс BitmapDecoder для загрузки изображений. Мне немного неудобно использовать это решение в ASP.NET, потому что оно требует от меня добавления ссылок на WindowsBase.dll и PresentationCore.dll, и я не уверен, что хочу их использовать в веб-проекте.

Кто-нибудь знает о каких-либо другие чистые решения .NET для проверки того, находится ли изображение в формате CMYK, который я могу безопасно использовать в ASP.NET?

15
задан Community 23 May 2017 в 10:30
поделиться

0 ответов

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

Похожие вопросы: