我正在研究C++代码.不太确定下面的代码试图做什么.希望有人帮忙.
int pval = t_gamma[depth[i]];
int lb = pval & 0xff;
switch (pval>>8) {
case 0:
depth_mid[3*i+0] = 255;
depth_mid[3*i+1] = 255-lb;
depth_mid[3*i+2] = 255-lb;
break;
case 1:
depth_mid[3*i+0] = 255;
depth_mid[3*i+1] = lb;
depth_mid[3*i+2] = 0;
break;
case 2:
depth_mid[3*i+0] = 255-lb;
depth_mid[3*i+1] = 255;
depth_mid[3*i+2] = 0;
break;
case 3:
depth_mid[3*i+0] = 0;
depth_mid[3*i+1] = 255;
depth_mid[3*i+2] = lb;
break;
case 4:
depth_mid[3*i+0] = 0;
depth_mid[3*i+1] = 255-lb;
depth_mid[3*i+2] = 255;
break;
case 5:
depth_mid[3*i+0] = 0;
depth_mid[3*i+1] = 0;
depth_mid[3*i+2] = 255-lb;
break;
default:
depth_mid[3*i+0] = 0;
depth_mid[3*i+1] = 0;
depth_mid[3*i+2] = 0;
break;
}
Run Code Online (Sandbox Code Playgroud)
Aas*_*set 10
0xff表示"十六进制数ff" - 换句话说,是整数255,它具有二进制表示00000000000000000000000011111111(当使用32位整数时).该&运算符执行按位与运算.a & b会给你一个带有位模式的整数,0其中所有位置b都有a 0,而在所有位置b都有a 1,使用相应的位值from a(这也是相反的方向).例如,位与10110111和00001101是00000101.
在这种情况下,pval & 0xff将为您提供最右边的8位pval.
至于代码的作用,我相信它会尝试将颜色值从特殊格式转换为标准RGB:颜色值似乎包含11位,其中三个指示颜色范围(例如,000似乎表示范围"白色到蓝色",而" 001表示"红色到黄色"),最右边的8位表示该范围内的颜色.
| 归档时间: |
|
| 查看次数: |
10654 次 |
| 最近记录: |