2

Following up my previous question: if and how would it be possible to take RGB based TIFF files and convert them over to CMYK with standard .NET (3.5) functionality?

Is that possible at all?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Jörg Battermann
  • 4,044
  • 5
  • 42
  • 79

2 Answers2

10

Actually there is a way using the System.Windows.Media.Imaging namespace which only seems to work properly with TIFFs at the moment (which is fine for me):

    Stream imageStream = new
        FileStream(@"C:\temp\mike4.jpg", FileMode.Open, FileAccess.Read, FileShare.Read);
    BitmapSource myBitmapSource = BitmapFrame.Create(imageStream);
    FormatConvertedBitmap newFormatedBitmapSource = new FormatConvertedBitmap();
    newFormatedBitmapSource.BeginInit();
    newFormatedBitmapSource.Source = myBitmapSource;
    newFormatedBitmapSource.DestinationFormat = PixelFormats.Cmyk32;
    newFormatedBitmapSource.EndInit();

    BitmapEncoder encoder = new TiffBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(newFormatedBitmapSource));

    Stream cmykStream = new FileStream(@"C:\temp\mike4_CMYK.tif",

    FileMode.Create, FileAccess.Write, FileShare.Write);
    encoder.Save(cmykStream);
    cmykStream.Close();

See "Converting images from RGB to CMYK", the answer by Calle Mellergardh.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Jörg Battermann
  • 4,044
  • 5
  • 42
  • 79
1

No, I don't think that's possible using standard GDI+ wrappers (System.Drawing). GDI+ only supports RGB. CMYK based images can be read by GDI+ (implicit conversion to RGB), but CMYK based images can't be written.

You might want to try something like GraphicsMill, which supports CMYK.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
baretta
  • 7,385
  • 1
  • 25
  • 25
  • CMYK support in GDI+ is iffy, at best, and something like CMYK with 16 bits per channel, for example, simply does **not** work – Tom Lint Apr 17 '18 at 15:45