WEB开发网
开发学院图形图像Flash 第四章 渲染技术Ⅰ[FL 基理译] 阅读

第四章 渲染技术Ⅰ[FL 基理译]

 2009-05-30 12:08:36 来源:WEB开发网   
核心提示: 对于 32 位数,其实道理也是一样的,第四章 渲染技术Ⅰ[FL 基理译](6),加入 8 位 alpha(透明度)通道并将其向左移 24 位,例如,只需要让它和 0xFF 执行与(AND)操作即可,对于 32 位色彩,有一组32位数为0xFFFF55F3,将 alpha 值向左移动 24

对于 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 位色彩,方法也是相同的,只不过需要一点小小的改动:

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:第四章 渲染 技术

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接