20

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

3 に答える 3

5

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

  • Windows 7:
    • イメージフラグ: ColorSpaceRgb
    • PixelFormat: PixelFormat32bppCMYK (8207)
  • Windows Server 2008 R2:
    • イメージフラグ: ColorSpaceRgb
    • PixelFormat: PixelFormat32bppCMYK (8207)
  • Windows Server 2008:
    • ImageFlags: ColorSpaceYcck
    • PixelFormat: 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;
    }
于 2012-03-28T01:32:01.863 に答える
5

データをロードする方法として BitmapImage から始めることはありません。実際、私はこれをまったく使用しません。代わりに、 を使用BitmapDecoder::Createして渡しBitmapCreateOptions.PreservePixelFormatます。次に、関心のある にアクセスして、CMYK を生成BitmapFrameするプロパティを確認できます。Format

次に、本当に画像を表示する必要がある場合は、サブクラスでBitmapFrameもある をに割り当てるだけです。BitmapSourceImage::Source

于 2010-12-02T02:58:16.987 に答える
0

私は同じ問題に遭遇し、あなたが.net 2.0を使用している場合、BitmapDecoderは機能しません..あなたがしたいことは、ファイルを読み込んで、バイトがファイルの内容を確認することです..CMYK画像を識別する方法C#を使用したASP.NETで これが誰かに役立つことを願っています。

乾杯 - ジェレミー

于 2012-02-28T18:07:53.393 に答える