Вопрос Image.Save (сохранение изображения CMYK в изображение CMYK)

В приложении Windows Forms я пытаюсь открыть изображение (CMYK tiff), добавить текст, а затем сохранить обратно в tiff-изображение CMYK, но когда я открыл выходное изображение в Photoshop, это было изображение RGB (цвета выглядели иначе, чем входное изображение). Ниже приведен код, и я ценю, если вы могли бы мне помочь.

Image^ chartImg = Image::FromFile( "user_chart.tif" );      
Graphics^ g = System::Drawing::Graphics::FromImage(chartImg);

String^ drawString = "Test test test test";
System::Drawing::Font^ drawFont = gcnew System::Drawing::Font("Arial", 9);
System::Drawing::SolidBrush^ drawBrush = gcnew             
System::Drawing::SolidBrush(System::Drawing::Color::Black);
float x = 100.0F;
float y = 10.0F;
System::Drawing::StringFormat^ strFormat = gcnew System::Drawing::StringFormat();
g->DrawString(drawString, drawFont, drawBrush, x, y, strFormat);

chartImg->Save("user_chart2.tif", System::Drawing::Imaging::ImageFormat::Tiff);

person Bongsun Lee    schedule 20.11.2009    source источник


Ответы (1)


То, что вы пытаетесь сделать, невозможно с WinForms и GDI+. Он не содержит подходящих кодировщиков/декодеров для обработки CMYK TIFF.

Когда CMYK TIFF открывается, его необходимо преобразовать в RGB, внести изменения, а затем преобразовать обратно в CMYK.

Цветовое пространство CMYK зависит от устройства, поэтому вам потребуется использовать LibTIFF и LittleCMS для чтения CMYK TIFF в буфер, преобразования его в RGB с использованием соответствующего профиля, добавления текста и преобразования его обратно. Все это требует использования профилей ICC или ICM.

Можно написать код, который будет записывать непосредственно в CMYK TIFF, однако они хранятся в «плоскостях» данных C, M, Y, K.

Прибегните к решению, использующему C++ и LibTIFF/LittleCMS, и вам повезет больше.

Возможно, другим вариантом является WPF, который, я считаю, открывает дополнительные двери с различными кодировщиками/декодерами изображений, но я не эксперт в этом.

person Community    schedule 20.11.2009
comment
Согласно nobugz, теперь есть кодировщик/декодер CMYK. Я сам не пробовал. Я буду придерживаться LibTIFF и LittleCMS. - person ; 21.11.2009