C# を使用して CMYK 画像を識別する方法 質問する

C# を使用して CMYK 画像を識別する方法 質問する

C# を使用して CMYK 画像を適切に識別する方法を知っている人はいませんか? ImageMagick を使用してそれを実行する方法は見つかりましたが、.NET ソリューションが必要です。オンラインで 3 つのコード スニペットを見つけましたが、Windows 7 で機能するのは 1 つだけで、Windows Server 2008 SP2 ではすべて機能しません。少なくとも Windows Server 2008 SP2 で機能する必要があります。私が見つけたのは次のとおりです。


    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Drawing;
    using System.Drawing.Imaging;

    bool isCmyk;

    // WPF
    BitmapImage wpfImage = new BitmapImage(new Uri(imgFile));

    // false in Win7 & WinServer08, wpfImage.Format = Bgr32
    isCmyk = (wpfImage.Format == PixelFormats.Cmyk32);

    // Using GDI+
    Image img = Image.FromFile(file);

    // false in Win7 & WinServer08
    isCmyk = ((((ImageFlags)img.Flags) & ImageFlags.ColorSpaceCmyk) == 
        ImageFlags.ColorSpaceCmyk); 

    // true in Win7, false in WinServer08 (img.PixelFormat = Format24bppRgb) 
    isCmyk = ((int)img.PixelFormat) == 8207; 

ベストアンサー1

私のテスト結果はあなたのものと少し異なります。

  • Windows 7の場合:
    • イメージフラグ: カラースペースRgb
    • ピクセルフォーマット: PixelFormat32bppCMYK (8207)
  • Windows Server 2008 R2の場合:
    • イメージフラグ: カラースペースRgb
    • ピクセルフォーマット: PixelFormat32bppCMYK (8207)
  • Windows Server 2008:
    • イメージフラグ: ColorSpaceYcck
    • ピクセルフォーマット: Format24bppRgb

次のコードは動作するはずです:

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

おすすめ記事