CMYK convert RGB

本文介绍了如何使用libjpeg库处理CMYK格式JPEG图像,涉及到CMYK到RGB的转换以及ICC配置文件在色彩管理中的作用。代码示例展示了读取和写入JPEG图像的过程,以及CMYK像素的反转操作。 ICC文件用于设备间颜色一致性,通过Lab颜色空间作为中介实现颜色转换。

libjpeg 处理CMYK 格式数据以及iCC配置文件

  • ICC文件,又叫ICC Color Profile,是指设备管理色彩特性的文件,各种具有色彩管理功能的软件(如photoshop)可以依据ICC文件的配置对不同设备的颜色特点进行准确地显示,转换和改变。同时,也能让颜色在不同设备上的传递过程时的失真最小 。
  • ICC文件是将所有和设备有关的颜色数据(RGB和CMYK数据),一一对应到和设备无关的Lab颜色模式上。从而通过Lab模式做为传递中介,保持所有颜色外观的一致,icc文件用来描述设备的颜色特性,并用于后期的空间转换。如显示器的icc文件,记录了显示器RGB和XYZ颜色关系,打印机和印刷机的icc记录了CMYK和lab颜色关系,XYZ,lab等颜色空间是与设备无关的颜色空间,统称为PCS空间,为颜色转换提供了中间空间。可以想象,如果显示器模拟印刷机的颜色,不可能将印刷机CMYK直接转换成显示器RGB,因为CMYK是设备的输出值,RGB是显示器的输入值,那怎么产生联系?CMYK-LAB-XYZ-RGB,这样就能进行颜色的转换
  • ICC profile 的配置文件表:https://www.kamilet.cn/icc-profile/

CMYK convert RGB

  • 对于存储格式为CMYK的图像,通常应用于jpeg和tiff格式中,利用libjpeg和libtiff库解析图片数据时,需要根据解析的方式进行相应的转换

  • 解析libjpeg时

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include "libjpeg/jpeglib.h"
    #include "libjpeg/jerror.h"
    
    typedef struct _Mat{
         
         
    	unsigned int nImageWidth;
    	unsigned int nImageHeight;
    	unsigned int nChannels;
    	unsigned char* pImageData; // 像素数据,RGB排列
    } Mat, *pHddMat;
    
    int decodeJpgImage(const char* jpgSource, Mat* pImgMat){
         
         
    	struct jpeg_decompress_struct cinfo;
    	jpeg_error_manager jerr;
    	FILE* fp;
    
    	JSAMPARRAY buffer;
    	int row_stride = 0;
    	unsigned char* dst = NULL;
    	int rgb_size;
    
    	fp = fopen(jpgSource, "rb");
    	if (fp == NULL)
    	{
         
         
    		printf("open input jpg file %s failed.\n", jpgSource);
    		return -1;
    	}
    	cinfo.err = jpeg_std_error(&jerr.pub);
    	jerr.pub.error_exit = jpeg_error_exit;
    
    	if (setjmp(jerr.setjmp_buffer))
    	{
         
         
    		jpeg_destroy_decompress(&cinfo);
    		fclose(fp);
    		printf("parse %s  input jpg file failed.\n", jpgSource);
    		return -2;
    	}
    
    	jpeg_create_decompress(&cinfo);
    
    	// step 2a: specify data source (eg, a handle)
    	jpeg_stdio_src(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值