if (x<0)x=0;else if (x>255)x=255;

//颜色范围0-255;
// 1.原始:
if (tem_b<0)tem_b=0;else if (tem_b>255)tem_b=255;
if (tem_g<0)tem_g=0;else if (tem_g>255)tem_g=255;
if (tem_r<0)tem_r=0;else if (tem_r>255)tem_r=255;

//2.使用条件状态值生成掩码来移除条件分支
tem_b &=-(tem_b>=0);//求负是为了生成掩码,也可以减1来生成掩码 <0
tem_b = (tem_b | -(tem_b>255) ) & 0xFF;//>255
tem_g &=-(tem_g>=0);
tem_g = (tem_g | -(tem_g>255) ) & 0xFF;
tem_r &=-(tem_r>=0);
tem_r = (tem_r | -(tem_r>255) ) & 0xFF;

//3.使用带符号的移位生成掩码来移除条件分支 (建议使用该方案替代上面的条件状态值方案)
tem_b &=~(tem_b>>31);  
tem_b = (tem_b | ((255-tem_b)>>31) ) & 0xFF;
tem_g &=~(tem_g>>31);
tem_g = (tem_g | ((255-tem_g)>>31) ) & 0xFF;
tem_r &=~(tem_r>>31);
tem_r = (tem_r | ((255-tem_r)>>31) ) & 0xFF;

//4.查表移除分支;
unsigned char_color_table[256+768+1];//假设color属于[-256..512] 
unsigned char*color_table=&_color_table[256];//先偏移256
//初始化 color_table;
for  ( int  i = -256;i<768 ; i++)
{
if (i<0) color_table[i]=0;
else if (i>255) color_table[i]=255;
else color_table[i]=i;
}
...
resultRow[3*x]=color_table[tem_b];
resultRow[3*x+1]=color_table[tem_g];
resultRow[3*x+2]=color_table[tem_r]; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值