颜色模式的问题,RGB ,Lab,CMYK的值

yebiaoxiang54 2009-05-03 10:37:13
我解析.acb色卡文件,里面的颜色值十六进制是 F8 7B 7B,请问如何转成Lab颜色值,我转成十进制是Lab(248,123,123),可是实际的值是Lab(97,-5,-5),请高手指教
...全文
198 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yebiaoxiang54 2009-05-03
  • 打赏
  • 举报
回复
直接转成十进制是不对的
yebiaoxiang54 2009-05-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lingyin55 的回复:]
C/C++ code
// Get the Lab value
void CCalculate::RGB2Lab(float R, float G, float B,
float *L, float *a, float *b)
{
double X, Y, Z, fX, fY, fZ;

X = 0.412453*R + 0.357580*G + 0.180423*B;
Y = 0.212671*R + 0.715160*G + 0.072169*B;
Z = 0.019334*R + 0.11…
[/Quote]


不是他们的互转,是这样的,.cab色卡文件解析出来后得到一个十六进制的颜色值,lab和rgb是3字节,CMYK是4字节的。
现在我解析得到色卡是lab类型的,所以颜色值是3字节,读取得到是 F8 7B 7B,接下来就是把它转成标准的Lab值,我不知道如何转了,直接转成十进制是不读的,我上面帖子已经说了,值相差很大
lingyin55 2009-05-03
  • 打赏
  • 举报
回复

// Get the Lab value
void CCalculate::RGB2Lab(float R, float G, float B,
float *L, float *a, float *b)
{
double X, Y, Z, fX, fY, fZ;

X = 0.412453*R + 0.357580*G + 0.180423*B;
Y = 0.212671*R + 0.715160*G + 0.072169*B;
Z = 0.019334*R + 0.119193*G + 0.950227*B;

X /= (255 * 0.950456);
Y /= 255;
Z /= (255 * 1.088754);

if (Y > 0.008856)
{
fY = pow(Y, 1.0/3.0);
*L = (float)(116.0*fY - 16.0 + 0.5);
}
else
{
fY = 7.787*Y + 16.0/116.0;
*L = (float)(903.3*Y + 0.5);
}

if (X > 0.008856)
fX = pow(X, 1.0/3.0);
else
fX = 7.787*X + 16.0/116.0;

if (Z > 0.008856)
fZ = pow(Z, 1.0/3.0);
else
fZ = 7.787*Z + 16.0/116.0;

*a = (float)(500.0*(fX - fY) + 0.5);
*b = (float)(200.0*(fY - fZ) + 0.5);

}
lingyin55 2009-05-03
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20030301/15/1480520.html
yebiaoxiang54 2009-05-03
  • 打赏
  • 举报
回复
对应rgb的值是RGB(230,250,255)

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧