How to identify CMYK images using C#

后端 未结 3 810
我在风中等你
我在风中等你 2020-12-31 01:32

Does anybody know how to properly identify CMYK images using C#? I found how to do it using ImageMagick, but I need a .NET solution. I found 3 code snippets online, only one

相关标签:
3条回答
  • 2020-12-31 01:56

    I ran into the same issues and if your using .net 2.0 then BitmapDecoder will not work.. what you want to do is read the file and just plain check to see that what the bytes say the file is.. How to identify CMYK images in ASP.NET using C# Hope this helps someone.

    Cheers - Jeremy

    0 讨论(0)
  • 2020-12-31 02:15

    I wouldn't start with BitmapImage as your way of loading the data. In fact, I wouldn't use it at all for this. Instead I would use BitmapDecoder::Create and pass in BitmapCreateOptions.PreservePixelFormat. Then you can access the BitmapFrame you're interested in and check its Format property which should now yield CMYK.

    Then, if you really need to display the image, you can just assign the BitmapFrame, which is also a BitmapSource subclass, to an Image::Source.

    0 讨论(0)
  • 2020-12-31 02:19

    My test results are a bit different than yours.

    • Windows 7:
      • ImageFlags: ColorSpaceRgb
      • PixelFormat: PixelFormat32bppCMYK (8207)
    • Windows Server 2008 R2:
      • ImageFlags: ColorSpaceRgb
      • PixelFormat: PixelFormat32bppCMYK (8207)
    • Windows Server 2008:
      • ImageFlags: ColorSpaceYcck
      • PixelFormat: Format24bppRgb

    The following code should work:

        public static bool IsCmyk(this Image image)
        {
            var flags = (ImageFlags)image.Flags;
            if (flags.HasFlag(ImageFlags.ColorSpaceCmyk) || flags.HasFlag(ImageFlags.ColorSpaceYcck))
            {
                return true;
            }
    
            const int PixelFormat32bppCMYK = (15 | (32 << 8));
            return (int)image.PixelFormat == PixelFormat32bppCMYK;
        }
    
    0 讨论(0)
提交回复
热议问题