mupdf中CMYK与RGB的转换算法
来源:互联网 发布:excel官方下载mac版本 编辑:程序博客网 时间:2024/06/17 22:50
之前碰到过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 MAX(a,b) ( (a) > (b) ? (a) : (b) )
#define CLAMP(x,a,b) ( (x) > (b) ? (b) : ( (x) < (a) ? (a) : (x) ) )
- mupdf中CMYK与RGB的转换算法
- CMYK与RGB相互转换(java)
- CMYK与RGB参数转换公式及转换方法
- 使用OpenCV实现RGB、HSI、CMYK颜色空间的转换
- rgb与cmyk颜色模式
- RGB与CMYK色彩模式
- RGB与CMYK几其他颜色模式的区别
- IE与CMYK和RGB色彩模式的兼容问题
- RGB 和 CMYK 相互转换原理
- CMYK与有什么RGB区别?
- RGB与CMYK颜色模式调色原理
- 将CMYK彩色空间的图片转换为RGB彩色空间的图片
- 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换
- PHP将CMYK颜色值和RGB颜色相互转换的例子
- Java 利用 ICC 色彩空间 color space profile 实现 RGB 和 CMYK 颜色的相互转换
- 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换
- 识别CMYK无法打印的RGB颜色
- RGB 和 CMYK,谁的色域大?
- 欢迎使用CSDN-markdown编辑器
- python-列表分割
- Ubuntu 16.04 下安装 LAMP
- VC2010及以后版本调用WebService接口的方法
- npm常用模块记录
- mupdf中CMYK与RGB的转换算法
- 推拉流良心第三方推荐
- 为什么docker容器启动不了?
- (4.5.5.4)Espresso的进阶: AdapterViewProtocol
- summernote入门-自定义上传-删除垃圾文件
- 让Entity Framework启动不再效验__MigrationHistory表
- 棋牌游戏服务器架构设计
- 法制在线 以康姿百德被诽谤坑骗消费者为例探析网络侵犯法人名誉权的行为特征
- jquery 停止动画 stop的几种用法