高难题:一个CMYK模式的JPG,如何通过编程的方式获取某点的CMYK值?

ToperRay 2015-05-28 11:04:42
搞了几天也没搞出来,希望高手们帮忙解决

一个CMYK模式的JPG,如何通过编程的方式获取某点的CMYK值?
...全文
633 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
paschen 2015-11-30
没接触过,帮顶!
回复
引用 8 楼 ToperRay 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] RGB转CMYK公式是通用的吧。
不可能通用的,和设备相关的。通用的只是一个规则,ICM。[/quote] http://bbs.blueidea.com/thread-300540-1-1.html
回复
公共马甲0315 2015-07-31
http://blog.csdn.net/zhengzhoudaxue2/article/details/7693258 这篇转载的写得还算清楚,呵呵,其实我正在看这个,不是特别明白这个霍夫曼表是怎么建立的。楼主如果有兴趣,我们可以下来交流交流,共同学习哈,我正在赶一个活,急需要解析jpg的。
回复
公共马甲0315 2015-07-31
唉,JPG解码非常麻烦的,我光看书已经看了三天了,资料非常不全,都不是完整的。现在只是了解各大概,还有部分细节尚不清晰。。。。。 JPG内部存储的是压缩数据,不是RGB这种格式的,不管是CMYK还是YUV格式的,都是需要经过几个基本的过程来获取原始数据。 1 解码 -- 需要读出JPG头部的Huffman表,一般是4个,两个DC表两个AC表,然后建立霍夫曼表的码字和权重,这个相当于数据的解码本。 2 读取数据内容,根据霍夫曼表进行解码,因为JPG的数据都是分块的,一般是8*8pixel小单元格的,但是亮度与色差的扫描周期不一致,可能是4:1:1也可能使1:1:1。根据不同的周期将数据解析成许多个8*8的矩阵。 3 反量化过程。因为压缩过程中使用了头部的量化表,所以需要对矩阵中的每个元素乘上量化表中的每个元素 4 反Zig-Zag编码:JPG内部的数据流形式不是通常的综上倒下 从左到右,而是"之"字型编码方式,你需要手动将它们调整会应该的位置。 5 反离散余弦变幻,就是通常所说的DCT变幻,通过变幻获取真实的数据矩阵。 6YCrCb->RGB转换。这步起始是最简单的。 如果你想自己写代码来解析,那得先查查JPG编码规范。当然有线程的dll类库能实现JPG->DIB的变幻。
回复
Yofoo 2015-07-07
GDI或+的库都是用RGB的, CMYK的操作可以下载JPEG库, 具体的要自己调试, 稍微说点过程 解压缩的代码可以参考内带的例子, 获取原始数据可以用 jpeg_read_scanlines函数 一般JPG内部存放的数据格式是 ycck, ycck这种数据可以转换陈RGB, 也可以转换为CMYK CMYK文件解压的第一个过程是DCT变换, (如函数 jpeg_idct_islow) 然后才是 ycck转换为CMYK (如函数: ycck_cmyk_convert) 在这个过程后就可以获取到原始的CMYK数据
回复
ToperRay 2015-06-30
引用 12 楼 zgl7903 的回复:
没有细研究过 瞎猜一下 既然是CMYK模式的JPG,解码后的数据是不是就是CMYK? 那问题是不是就转化成了如何解码和使用X,Y坐标找到数据点位置的问题了?
不好猜,感觉不是。我觉得问题的核心是RGB如何根据ICC转成CMYK。坐标点应该好找。
回复
zgl7903 2015-06-25
没有细研究过 瞎猜一下 既然是CMYK模式的JPG,解码后的数据是不是就是CMYK? 那问题是不是就转化成了如何解码和使用X,Y坐标找到数据点位置的问题了?
回复
ToperRay 2015-06-24
UPUPUP
回复
ToperRay 2015-06-18
引用 9 楼 wangningyu 的回复:
CxImage::GetDIB获取所有点的颜色值 再把每个点的RGB转CMYK,这个算法百度一下很多的
能有这么简单就不是高难题了。
回复
逗比汪星人 2015-06-14
CxImage::GetDIB获取所有点的颜色值 再把每个点的RGB转CMYK,这个算法百度一下很多的
回复
ToperRay 2015-06-13
引用 7 楼 zhao4zhong1 的回复:
RGB转CMYK公式是通用的吧。
不可能通用的,和设备相关的。通用的只是一个规则,ICM。
回复
赵4老师 2015-06-11
RGB转CMYK公式是通用的吧。
回复
ToperRay 2015-06-10
引用 5 楼 worldy 的回复:
jpg是编码数据,每个数值都不是独立的,要解码为BMP,再根据RGB值根据公式转换为CMYK值
根据什么公式?JPG是支持CMYK的,也可以说JPG本身存在一个RGB转为CMYK的公式,难点是怎么把这个公式找到。
回复
ToperRay 2015-06-07
引用 3 楼 schlafenhamster 的回复:
"C++的RGB图像与CMYK图像相互转 rgbtocmyK.zip" http://www.400gb.com/file/30597193
这个程序代码里的CMYK值是自己算出来的,并非JPG图原本有的值,所以这个代码无法解决我的问题。
引用 2 楼 worldy 的回复:
JPG没有解码肯定是无法直接读到像素值的,最简单的办法就是使用JPG库转换为BMP再读取
BMP中并不存在CMYK值,现在的难点是怎么取得JPG每一个点的CMYK值
回复
worldy 2015-06-07
jpg是编码数据,每个数值都不是独立的,要解码为BMP,再根据RGB值根据公式转换为CMYK值
回复
worldy 2015-05-28
JPG没有解码肯定是无法直接读到像素值的,最简单的办法就是使用JPG库转换为BMP再读取
回复
pingshell 2015-05-28
把JPG在内存中解压成BMP,再取某个像素的值。
回复
schlafenhamster 2015-05-28
"C++的RGB图像与CMYK图像相互转 rgbtocmyK.zip" http://www.400gb.com/file/30597193
回复
发动态
发帖子
图形处理/算法
创建于2007-09-28

1.9w+

社区成员

VC/MFC 图形处理/算法
申请成为版主
社区公告
暂无公告