http://tech-algorithm.com/articles/linear-interpolation/
这是代码。
在本页面给出的代码中,我无法理解这是什么
return 0xff000000 | // alpha
((Yr << 16) & 0xff0000) |
((Yg << 8) & 0xff00) |
(Yb & 0xff) ;
做。更具体地说,我不知道这是什么(Yr << 16)
。非常感谢帮助。
答案 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;