360ITO技术社区
  • 首页
  • 文章
  • 快讯
  • 讨论
  • 问答
  • 小贴士
  • 代码块
  • 开源
  • 老论坛
登录 | 注册

360ITO技术社区  > 文章

订阅文章

解决ImageEn 读cmyk模式的JPG无法知道是cmyk模式问题

半支烟 发布于 7年前 ( comment 0条评论  查看:5481  收藏:0 )
本来想着TIOJPEGColorspace中就有ioJPEG_CMYK类型的定义,通过TImageEnIO的ParamsFromFile方法读取后就可以知道是不是CMYK调色板了,写了下面代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ImageEnIO1.ParamsFromFile('C:\temp\1.jpg');
  ShowMessage(ImageEnIO1.Params.FileTypeStr);
end;
显示结果是:
 JPEG Bitmap(JPG) JCbCrk
从这个结果中我们看不出是CMYK模式的图片。
 
在搞一副RGB类型的JPG图片,获取参数显示结果是:
 JPEG Bitmap(JPG) JCbCr
后面就少了一个k,但是看注释这个k应该表示是Black的意思!
 

经过跟踪调试发现jpeg_read_header(cinfo, TRUE);的时候结果有cmyk,如下图:


有CMYK就好办了,在TIOParamsVals中加一个变量记录一下,
  public
    fIsCmyk:Boolean;
并在ParamsFromFile方法中赋值为false:
procedure TImageEnIO.ParamsFromFile(const nf: string);
begin
  {$ifdef IEPROFILE} try IEProfileBegin('TImageEnIO.ParamsFromFile'); {$endif}
  try
    Params.fIsCmyk := false;
    ParamsFromFileFormat(nf, FindFileFormat(nf, true));
  except
    fParams.fFileType := ioUnknown;
  end;
  {$ifdef IEPROFILE} finally IEProfileEnd; end; {$endif}
end;
修改jpegfilt中的ReadJPegStream方法,在jpeg_read_header以后对fIsCmyk赋值:
    if cinfo.out_color_space = JCS_CMYK then
    begin
      IOParams.fIsCmyk := True;
    end;


改好后,测试一下,代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ImageEnIO1.ParamsFromFile('C:\temp\1.jpg');
  if ImageEnIO1.Params.fIsCmyk then
  begin
    ShowMessage('is CMYK');
  end;
  ImageEnIO1.ParamsFromFile('C:\temp\2.jpg');
  if not ImageEnIO1.Params.fIsCmyk then
  begin
    ShowMessage('is not CMYK');
  end;
end;

1.jpg是CMYK的,就提示了is CMYK,2.jgp是RGB的,就是提示了 is not CMYK,大功告成!!!


0 有用 0 无用
本站原创,欢迎转载;尊重他人劳动,转载时保留以下信息:
本文转自:360ITO技术社区
原文标题:解决ImageEn 读cmyk模式的JPG无法知道是cmyk模式问题
原文地址:http://www.360ito.com/article/646.html
360ito.com
delphi

共有0个评论 我要评论»

按时间排 按有用数排 按支持数排

网友回复/评论仅代表其个人看法,并不表明本社区同意其观点或证实其描述。

请尽量让自己的回复能够对别人有帮助

1.不欢迎无意义的回复/评论和类似“顶”、“沙发”之类没有营养的文字
如果只是想简单的表个态,请点 有用无用支持反对 等按钮
2.发言之前请再仔细看一遍文章,或许是您遗漏、误解了,理性讨论、切莫乱喷
3.严禁发布违法、违规的信息,请勿到处招贴广告、发布软文;
4.如果您发现自己的回复/评论不见了,请参考以上3条
5.不停制造违规、垃圾信息的,账户将被禁止

热门标签

  • android 20
  • Flash 15
  • 游戏 12
  • Linux 12
  • Python 11
  • 工作笔记 11
  • 社交游戏 7
  • delphi 5
  • jquery 5
  • 编程 4
  • 谷歌 4
  • git 4
  • Centos 4
  • JavaScript 3
  • 开发者 3
  • C/C++ 3
  • 安全 2
  • 代码 2
  • 浏览器 2
  • 移动应用 2

相关文章

周热点

月热点

Copyright ©2011-2012 360ITO技术社区 All Rights Reserved. | 关于 | 联系我们 | 杭州精创信息技术有限公司 浙ICP备09019653号-26|
▲