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条回答

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!