【C#】CMYK形式の画像ファイルをRGB形式に変換する
印刷するわけでもないのに、なぜCMYK形式の画像ファイルが紛れているのか…。
文句言ってもしかたないので、変換する処理を実装してみた。
例の如く情報が少ないのでリファレンスと超睨めっこしたけど、日本語のリファレンスがあるだけましか…。
public class ConvertColorMode { /// <summary> /// CMYK形式の画像ファイルをRGB形式に変換する。 /// </summary> /// <param name="src">元画像のパス</param> /// <param name="dest">変換後のパス</param> public void Convert(String src, String dest) { using (FileStream stream = new FileStream(src, FileMode.Open)) { // 変換はColorConvertedBitmapで行う。 BitmapSource source = BitmapFrame.Create(stream); BitmapFrame frame = (BitmapFrame)source; ColorContext srcColor = frame.ColorContexts[0]; ColorContext destColor = new ColorContext(PixelFormats.Bgra32); ColorConvertedBitmap ccb = new ColorConvertedBitmap( source, srcColor, destColor, PixelFormats.Bgr32); // Bitmapに変換してから出力する。 MemoryStream ms = new MemoryStream(); BitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(ccb)); encoder.Save(ms); Bitmap bitmap = new Bitmap(ms); bitmap.Save(dest); } } }
見ての通り変換処理はColorConvertedBitmapを使用しておこなう。
コンストラクタの引数にたくさん変数を渡しているけど、第3引数と第4引数で目的のカラーモードを指定している。
上記の実装ではCMYK→RGBの変換だけど、引数を切り替えればRGB→CMYKの変換もおこなうことができる。
画像ファイルはJPGの想定なのでJPG形式でエンコードして、Bitmapに変換して出力している。
実は、変換部分より出力方法のがわからなくて結構悩んだ…。