baidu_25665887 2015-02-04 08:49 采纳率: 75%
浏览 8338

谁能给一份比较好的RGB和CMYK互相转换的算法?

最好是对CMYK低分辨率支持的比较好的,因为我这里要求是CMYK每种颜色都量化成8个色阶。
下面是我的代码,RGB转成CMYK后再转回来失真严重。

void CMy3View::RGB2CMYK(int red, int green, int blue, int &C, int &M, int &Y, int &K) //RGB转CMYK
{
double c,m,y,k;
c = (double)(255 - red) / 255;
m = (double)(255 - green) / 255;
y = (double)(255 - blue) / 255;

if(c<=m&&c<=y)  //k赋值为c,m,y的最小值
    k=c;
else if(m<=c&&m<=y)
    k=m;
else
    k=y;

if(1.0 == k)
   c = m = y = 0;
else{
    c = (c - k) / (1 - k);
    m = (m - k) / (1 - k);
    y = (y - k) / (1 - k);
}
C=(int)8.0*c;    //不要问我为什么这里要乘8,要求就是CMYK只有8个色阶,必须得
M=(int)8.0*m;  //这么做
Y=(int)8.0*y;
K=(int)8.0*k;

}

void CMy3View::CMYK2RGB(int c, int m, int y, int k, int &r, int &g, int &b) //CMYK转RGB
{
r =(int)(1.0-c/8.0)*(1.0-k/8.0)*255.0 +0.5;
g =(int)(1.0 - m/8.0) * (1.0 - k/8.0) * 255.0+0.5;
b =(int)(1.0 - y/8.0) * (1.0 - k/8.0) * 255.0+0.5;
}

  • 写回答

2条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波