一.计算机屏幕上的颜色表示方法:
1.RGB表示或者ARGB表示:
1)32位的颜色A,R,G,B分别占8位,一共4个字节(32位),那么每个分量
的取值范围为0--255(十进制)或者0--ff(十六进制)
2)24位的颜色,每个颜色分量用8位来表示.
问题:说到这里,有人就会问,有没有其他位数的颜色,其他位数的颜色每个
分量分别占几位呢? 比如16位的 比如8位的?
二.颜色的计算
1)颜色加法:
两种颜色的各个分量分别相加,
比如颜色C1(r1,g1,b1)和C2(r2,g2,b2)
C3 = C1+C2 = (r1+r2,g1+g2,b1+b2)
然后这样相加每个分量有可能会超过分量的取值范围,所以在做加法的时候
需要对每个分量进行处理,保证相加后的分量是在正常数值之间.
2)颜色的调制
颜色*标量,可以达到颜色变亮或者变暗的效果,比如:
C1*s = (s*r1,s*g1,*b1)
这里也要注意同上的问题.
颜色*颜色,例如C1*C2 = (r1*r2,g1*g2,b1*b2)
这里也要注意同上的问题.
使用以上3种颜色进行混合计算可以得到很多效果.
3)alpha混合
在ARGB模式的颜色中,A就是表示alpha值, alpha值用来做两种颜色
的混合计算,得到一些效果,比如半透明效果,不透明,或者全透明,等等.
做透明效果一定是2种颜色进行alpha混合运算得来的,
从alpha混合公式就能看出来:
最终像素颜色值 = 源像素颜色值(将要绘制的)*alpha+ 目的像素颜色值(已经绘制的)*(1-alpha)
这里的alpha的取值范围为0-1之间。
一段透明度的实现例子:
float R1 = 255;
float G1 = 0;
float B1 = 0;
float A1 = 0.3f;
float R2 = 255;
float G2 = 255;
float B2 = 255;
float A2 = 1;
//进行aphla混合
DWORD AphlaCorlorR = R1*A1+(1-A1)*(R2); R1的30%颜色 + R2的70%的颜色,得出来的效果想象可知R2的颜色成分多些,这样R1和R2的颜色进行比较看起来 R1相对R2来说就是透明的,但不是半透明
DWORD AphlaCorlorG = G1*A1+(1-A1)*(G2); 同上
DWORD AphlaCorlorB = B1*A1+(1-A1)*(B2); 同上
颜色计算相关知识参照<<3D编成大师技巧>>,第8章节8.1.1颜色模型和材质。
欢迎加入QQ群 :45811732