2009-11-20 76 views
0

在Windows窗体应用程序,我试图打开图像(CMYK TIFF),添加文字,然后保存回CMYK TIFF图像,但是当我打开在Photoshop中输出图像,它是RGB图像(颜色看起来不同于输入图像)。以下是代码,我很感激你能否帮助我。Image.Save问题(保存CMYK图像CMYK图像)

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); 

回答

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,我相信可以通过各种图像编码器/解码器打开额外的大门,但我并不擅长这一点。

+0

根据nobugz,现在有一个CMYK编码器/解码器。我没有自己尝试过。我会坚持使用LibTIFF和LittleCMS。 – 2009-11-20 22:01:08