Sweets Junkie

もぅマヂ無理。ムズかしぃコト。。。ぉぼぇてらんなぃから。。。ブログかコ。。。デザィンみづらくてぇ。。。それどころじゃなぃ。。。

【C#】画像ファイルのカラーモードを判断する方法

画像ファイルのカラーモードを判別する方法について1週間くらい悩んだ末、やっとこさ方法が判明!
C#って意外に日本語の情報が少なくて難儀な言語ですね…。

とりあえず、画像ファイルを読み込んでカラーモードを判別したいなら以下のような実装で実現することができる。

public class IsCmyk
{
    /// <summary>
    /// 画像ファイルのカラーモードがCMYKかチェックする。
    /// </summary>
    public Boolean Check()
    {
        using (FileStream stream =
                new FileStream("cmyk.jpg", FileMode.Open))
        {
            BitmapDecoder dec = 
            	BitmapDecoder.Create(
                    stream, 
                    BitmapCreateOptions.PreservePixelFormat, 
                    BitmapCacheOption.Default);
            if (dec.Frames[0].Format == PixelFormats.Cmyk32)
            {
                return true;
            }
        }
        return false;
    }
}

ポイントはBitmapDecoderに「BitmapCreateOptions.PreservePixelFormat」を設定して初期化しているところ。
これを設定しないと、システムが勝手に最適なPixelFormatを選択してしまうため、CMYKの画像ファイルを読み込ませていても、PixelFormatがRGBになってしまったりする。
Bitmapで試してみて思うような結果が得られなかったのは、この辺が原因みたい。