线性插值中的布尔逻辑

时间:2014-10-16 19:04:41

标签: image-processing boolean-logic hex

http://tech-algorithm.com/articles/linear-interpolation/

这是代码。

在本页面给出的代码中,我无法理解这是什么

         return 0xff000000 | // alpha
                ((Yr << 16) & 0xff0000) |
                ((Yg << 8) & 0xff00) |
                (Yb & 0xff) ; 

做。更具体地说,我不知道这是什么(Yr << 16)。非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

这是一个将RGB三元组(三个无符号8位值)转换为无符号32位ARGB值的简单函数。

<<运算符将整数的二进制数字向左移动指定的位数。因此,例如,如果Yr = 100,Yg = 150且Yb = 200,那么您将得到32位数字0xFF6496C8,其中RGB信息存储如下:

 ---- alpha ----  ----- Yr ------  ----- Yg ------  ----- Yb ------
[1 1 1 1 1 1 1 1][0 1 1 0 1 0 0 0][1 0 0 1 0 1 1 0][1 1 0 0 1 0 0 0]
 alpha=255=0xFF   Yr=0x64=100      Yg=0x96=150      Yb=0xC8=200

alpha值(255)可能对应于100%不透明度。

如果您想知道,&运算符是一个逻辑AND运算符,可以屏蔽掉不需要的位。在您链接的代码中,它似乎根本不需要,因为值Yr,Yg和Yb已经在0到255的范围内。

但是,从32位ARGB整数中提取RGB值非常有用,例如:

alpha = (ARGB >> 24) & 0xff;
Yr = (ARGB >> 16) & 0xff;
Yg = (ARGB >> 8) & 0xff;
Yb = ARGB & 0xff;