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