【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で試してみて思うような結果が得られなかったのは、この辺が原因みたい。