之前碰到过RGB与CMYK之间转换的问题,网上也没有比较官方的转换公式,不同的软件可能会采用不同的算法,现在mupdf,正好也看到了这样的算法,还是有一定参考价值的,具体算法如下:

#define MIN(a,b) ( (a) < (b) ? (a) : (b) )
#define MAX(a,b) ( (a) > (b) ? (a) : (b) )
#define CLAMP(x,a,b) ( (x) > (b) ? (b) : ( (x) < (a) ? (a) : (x) ) )

static void cmyk_to_rgb( float *cmyk, float *rgb)
{
#ifdef SLOWCMYK /* from poppler */
float c = cmyk[0], m = cmyk[1], y = cmyk[2], k = cmyk[3];
float c1 = 1 - c, m1 = 1 - m, y1 = 1 - y, k1 = 1 - k;
float r, g, b, x;

/* this is a matrix multiplication, unrolled for performance */
x = c1 * m1 * y1 * k1; /* 0 0 0 0 */
r = g = b = x;
x = c1 * m1 * y1 * k; /* 0 0 0 1 */
r += 0.1373 * x;
g += 0.1216 * x;
b += 0.1255 * x;
x = c1 * m1 * y * k1; /* 0 0 1 0 */
r += x;
g += 0.9490 * x;
x = c1 * m1 * y * k; /* 0 0 1 1 */
r += 0.1098 * x;
g += 0.1020 * x;
x = c1 * m * y1 * k1; /* 0 1 0 0 */
r += 0.9255 * x;
b += 0.5490 * x;
x = c1 * m * y1 * k; /* 0 1 0 1 */
r += 0.1412 * x;
x = c1 * m * y * k1; /* 0 1 1 0 */
r += 0.9294 * x;
g += 0.1098 * x;
b += 0.1412 * x;
x = c1 * m * y * k; /* 0 1 1 1 */
r += 0.1333 * x;
x = c * m1 * y1 * k1; /* 1 0 0 0 */
g += 0.6784 * x;
b += 0.9373 * x;
x = c * m1 * y1 * k; /* 1 0 0 1 */
g += 0.0588 * x;
b += 0.1412 * x;
x = c * m1 * y * k1; /* 1 0 1 0 */
g += 0.6510 * x;
b += 0.3137 * x;
x = c * m1 * y * k; /* 1 0 1 1 */
g += 0.0745 * x;
x = c * m * y1 * k1; /* 1 1 0 0 */
r += 0.1804 * x;
g += 0.1922 * x;
b += 0.5725 * x;
x = c * m * y1 * k; /* 1 1 0 1 */
b += 0.0078 * x;
x = c * m * y * k1; /* 1 1 1 0 */
r += 0.2118 * x;
g += 0.2119 * x;
b += 0.2235 * x;

rgb[0] = CLAMP(r, 0, 1);
rgb[1] = CLAMP(g, 0, 1);
rgb[2] = CLAMP(b, 0, 1);
#else
rgb[0] = 1 - MIN(1, cmyk[0] + cmyk[3]);
rgb[1] = 1 - MIN(1, cmyk[1] + cmyk[3]);
rgb[2] = 1 - MIN(1, cmyk[2] + cmyk[3]);
#endif
}

static void rgb_to_cmyk(float *rgb, float *cmyk)
{
float c, m, y, k;
c = 1 - rgb[0];
m = 1 - rgb[1];
y = 1 - rgb[2];
k = MIN(c, MIN(m, y));
cmyk[0] = c - k;
cmyk[1] = m - k;
cmyk[2] = y - k;
cmyk[3] = k;
}

#define MIN(a,b) ( (a) < (b) ? (a) : (b) )
#define MAX(a,b) ( (a) > (b) ? (a) : (b) )
#define CLAMP(x,a,b) ( (x) > (b) ? (b) : ( (x) < (a) ? (a) : (x) ) )

mupdf中CMYK与RGB的转换算法相关推荐

  1. java rgb hsl_java的RGB转HSL算法

    import org.eclipse.swt.graphics.RGB; /** * 颜色转换算法 * */ public class ColorTools { public static HSL R ...

  2. YUV / RGB 格式及快速转换算法

    1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确 ...

  3. 色温(Kelvin)到RGB的转换:算法和样例

                             色温(Kelvin)到RGB的转换:算法和样例 据我所知,还不太可能找到从色温到RGB转换的一个可靠的公式.虽然,有很多算法实现了类似的功能,但是,大 ...

  4. HTML把cmyk转换为RGB,CMYK在线转换成pantone色卡号,cmyk转换对应潘通色号

    Cyan(C) % Magenta(M) % Yellow(Y) % Key (black)K % 最接近的潘通色号是: 选择需要集中接近颜色 16 32 48 64 80 96 RGB : (255 ...

  5. 使用MFC实现将图像的RGB值转换到HSV空间,同时进行调节HSV,再将调节后的HSV值传进去转换到RGB空间实现图像在HSV空间中的色度、饱和度、亮度的调节

    工程上传到了github ,之前有一版忘记推送了,现在这个链接应该是没问题的了 工程的github链接 希望能帮到你. 文章内容: 1.回顾上文 2.实验步骤&要点提示&代码分析 3. ...

  6. rgb hsl转换_python中的rgb hsl转换

    rgb hsl转换 The most common ways of encoding colour values are RGB (red, green and blue) and HSL (hue, ...

  7. 【DSP开发】【VS开发】YUV与RGB格式转换

    [视频处理]YUV与RGB格式转换 YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式. 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式. RGB与 ...

  8. rgb 光谱 转换_使用深度学习将RGB图像转换为高光谱

    rgb 光谱 转换 Finding an applicable cost-effective way to convert and use hyperspectral images. 寻找一种适用的具 ...

  9. 【转】“HSB”、“lab“、“CMYK“、“RGB“有什么区别?

    "HSB"."lab"."CMYK"."RGB"有什么区别_百度知道 (baidu.com)https://zhidao ...

最新文章

  1. WGCNA分析,简单全面的最新教程
  2. notepad++ 设置常用快捷键
  3. P9 线性系统状态空间分析-《Matlab/Simulink与控制系统仿真》程序指令总结
  4. CentOSLinux安装Docker容器
  5. C小项目 —— 学生选课系统
  6. Vue3 Composition API(三)——生命周期钩子、Provide函数 和 Inject函数、封装Hook案例、setup顶层编写方式
  7. Java 网络实例一(获取指定主机的IP地址、查看端口是否已使用、获取本机ip地址及主机名、获取远程文件大小)
  8. java实现背包问题例子_动态规划(背包问题)java实现
  9. 富士康欲进军电动汽车市场 目标占据市场10%份额
  10. ado显示,删除后刷新重新显示
  11. 安装dubbo管理控制台
  12. 调手表(蓝桥杯2018年B组真题)
  13. 调查:人工智能技术的应用现状
  14. SAP GUI登陆系统报Validity of certificate from list with PSE type >SSL错误弹窗
  15. VS2003下载地址
  16. 高德地图获取坐标距离_高德地图获取两个经纬度点间直线距离JS/PHP/SQL代码
  17. 怎么查看笔记本内存条型号_新买的笔记本如何查看笔记本内存条型号有哪些方法...
  18. QEMU 简介(一)
  19. SAP SM04踢人操作(摘录)
  20. 直播回顾 | 一起来get 电商风控实操知识点

热门文章

  1. 客户说:在忙,回头联系你。如何话术应对呢?
  2. 【英语学习】关于音标的汇总图分享
  3. 8-2 Android 摄像头和相册
  4. Linux-dd命令详解
  5. 循环语句介绍(笔记学习)
  6. 服务化系统容量评估和性能保障
  7. python数据分析与展示--图像的手绘效果
  8. 计算机图形学(第四版)-第一个画线例子- 读书笔记P30
  9. 史上最全Java开发手册!!!阿里出版
  10. Android超强大的粒子动画库,流星雨,爆炸,满屏飞花,等粒子特效快速实现