第四章 渲染技术Ⅰ[FL 基理译]
2009-05-30 12:08:36 来源:WEB开发网对于 32 位数,其实道理也是一样的,加入 8 位 alpha(透明度)通道并将其向左移 24 位。例如,有一组32位数为0xFFFF55F3,将 alpha 值向左移动 24 位,结果如下:
11111111111111110101010111110011
前8位数表示透明度,后面的 red, green, blue 值与前面的一样。
获取颜色值
假如有这样一个数 0xFF55F3,要从中提取 red, green, blue 的值。下面请看公式,首先是 24 位色彩:
red = color24 >> 16;
green = color24 >> 8 & 0xFF;
blue = color24 & 0xFF;
一句句来看。首先,大家也许会猜到 >> 是按位右移运算符,用于将二进制位向右移动。如果这些位向右移动得过多,那么这些数字就会消失,就没有数了。
下面从 red 开始:
111111110101010111110011
将颜色值向右移动 16 位,结果如下:
11111111,或是0xFF(255)
对于 green,向右移动 8 位,结果如下:
1111111101010101
这里已经得出了 blue 的值,但是 red 值还留在一旁。这里就是要使用与(And)操作符的地方,与(OR)操作符相同,都是对两组数值的比较,可以这样解释“两个数相比较,如果两个都是1那么结果就为 1,如果其中有一个为 0,那么结果就为 0”。我们把它与 0xFF 进行比较:
1111111101010101
0000000011111111
因为所有的 red 位的数字都与0相比较,所以它们的结果均为 0,只有当两个数都为1时结果才为 1,所以结果如下:
0000000001010101
对于 blue 则不需要执行右移操作,只需要让它和 0xFF 执行与(AND)操作即可。对于 32 位色彩,方法也是相同的,只不过需要一点小小的改动:
更多精彩
赞助商链接