资料上说: Y = R+G
M = B+R
C = B+G
拿 Y = R+G 来说, 比如我得到的R值为255, G也值为255, 那么Y 等于多少? 总觉得直接相加或进行矢量运行总不对(因为资料上Y是用5bit来表示的,即要小于32)。 不知它真正是怎么运算的?
解决方案 »
- 100 分悬赏 解决 客户端连接 诡异问题 。。。
- 讨论,windows的FTP API函数下不了UTF8编码网站东西的原因分析
- 救命呀,我都快崩溃了,为什么我的ListCtrl中的HeaderCtrl始终显示的是乱码呢?
- 哪个地方有VC的类库和函数库的详细介绍。最好是中文的。谢谢了。
- 菜鸟问题:如何改变CSTatic的文字颜色?
- 到底m_pCurFont=new CFont;这个定义有什么错误?系统报出一大堆错啊!
- ATL中使用全局变量的问题?
- 声音的问题!!
- Invalidate(),Updatedata().
- 关于MFC中线程函数的问题,项目非常急,谢谢各位大虾!!!!!!!
- 我的定时器怎么不工作啊?
- 一系列的要求,你能完成吗?????
float C = 1-(R*1.0/255);
float M = 1-(G*1.0/255);
float Y = 1-(B*1.0/255); float var_K = 1;
if(C < var_K)
{
var_K = C;
}
if(M < var_K)
{
var_K = M;
}
if(Y < var_K)
{
var_K = Y;
}
C = (C - var_K) / (1 - var_K);
M = (M - var_K) / (1 - var_K);
Y = (Y - var_K) / (1 - var_K);
float K = var_K;
一般使用以上的公式,不过,photoshop有自己的算法。
通常RGB 用在光學效果的彩色螢幕上,利用 RGB 可調配出各種不同的
光點,但是利用物理反應的噴墨印表機可就不是如此了,利用 RGB 效果
無法達到令人滿意的效果,所以一般彩色噴墨印表機都使用和 R、G、B
互為互補色的C、M、Y 當成顏料。
非常谢谢,不过再确认一下:
按你的公式算出的Y值一定小于32么?
TRACE( " %d", C );
TRACE( " %d", M );
TRACE( " %d", Y );
输出结果:
.....0 0 0 0 0 -1610612736 0 0 -2147483648 -1073741824 0 -
2147483648 0 0 536870912 1073741824 0 -536870912 -1073741824
0 -2147483648 -1073741824 0 1610612736 -1610612736 0 ......如果是
TRACE( " %.2f", C );
TRACE( " %.2f", M );
TRACE( " %.2f", Y );
输出结果:
......0.20 0.00 0.67 0.18 0.00 0.66 0.23 0.00 0.64 0.64 0.00 0.65 0.88 0.00 0.66 0.81 0.00 0.66 0.81 0.00 0.66 0.81 0.00 0.66 0.81 0.00 0.66 0.81 0.00 0.64 0.85 0.00 0.70 0.89 0.00 0.41 0.43 0.00 0.03 0.02 0.00 0.42 0.46 0.00 0.70 0.89 0.00 0.66 0.81 0.00 0.64 0.85 0.00 0.70 0.89 0.00 0.47 0.52 0.00 0.07 0.05 0.00 0.00 0.00 0.00 0.00.....这应该是不正确的吧,为什么会这样?
这些值乘以255是会大于100的,是不是有更详细的算法进行处理后值才会落到1-100之间? 那这个算法又是什么呢?
http://www.easyrgb.com/math.php?MATH=M13#text13
你是真正解决我的问题的人,怎么感谢你呢?
还是给分先。
thank u.