0

在 Windows 窗体应用程序中,我试图打开图像(CMYK tiff),添加文本,然后保存回 CMYK tiff 图像,但是当我在 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);
4

1 回答 1

0

使用 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,我相信它为各种图像编码器/解码器打开了额外的大门,但我不是这方面的专家。

于 2009-11-20T21:56:32.320 回答