简短版:有什么简单的方法可以确定在Delphi XE中JPG文件是CMYK还是RGB?最好没有任何额外的库...
更长的版本:我有一个接受JPEG的第三方库。但无论出于何种原因,图书馆需要知道它们是否处于CMYK或RGB色彩空间。更糟糕的是,它会使CMYK的颜色错误(可能与CMS有关......)。 Delphi本身(TJPEGImage)正确显示CMYK图像,但似乎所有“CMYK vs RGB内容”都隐藏在jpeg.pas实现部分中,并且未发布...
我在互联网上搜索了很多东西,但在这里我发现只有几年的帖子。我也发现了Gabriel Corneanu修改过的jpeg.dcu,但它完全是为了让Delphi正确加载图像。而且似乎XE确实正确加载了CMYK JPEG。
最后我更倾向于将CMYK图像转换为RGB,即使它听起来很可怕,我也不介意通过重新编码JPEG来实现它(如果没有其他更好的选择)。基本上将其加载到位图并在需要时将位图保存为JPEG ...
P.S。我想尽可能避免将另一个库带到我的项目中,并且我希望尽可能地保持在“标准Delphi”中,所以如果我需要将这个项目移动到Mac,iOS或Android我不需要处理很多外部事情......
答案 0 :(得分:1)
几乎可以在几乎所有时间工作的简单方法是在图像中搜索SOF(帧开始)标记。
如果该标记具有1个分量,则图像为灰度;如果它有3个组件,它很可能是YCbCr;如果它有4个组件,则很可能是CMYK。
如果您想要更可靠的方法,则需要识别JPEG文件格式。为此,您将阅读APPn标记。从那里开始,处理将取决于找到的文件类型。
答案 1 :(得分:1)
我们已将解决方案缩小为三个: