当时遇到一个图形显示需求,是怎样将两张图片做半透明混合,BREW的GDI函数并没有这个功能
但找到了显示缓冲区的指针,可以直接操作这一片内存来实现各种显示效果,这就有了很大的想象力
最开始一个同事设想的算法是这样的
就是把像素点的RGB值取出来,相加除以2再写回去
还有一部分设备的显示缓冲区的像素点是16bit,5-6-5的结构,在这个算法的基础上还要把24位色改成16位色方式取出来
我当时提出了 一个算法,RGB565的结构为
rrrr, rggg, gggb, bbbb
右移一位
0rrr, rrgg, gggg, bbbb
与
0111, 1011, 1110, 1111(0x7BEF)
做与运算,结果就变成了
0rrr, r0gg, ggg0, bbbb
在未取出RGB色值的情况下,各色值都除了2,实际上减少了大循环内的运算次数
这个算法唯一的不足点,就是两个点值是先除后加,比先加后除的会略微损失那么一点点精度
这一点点的优化开启了当时图形优化的潘多拉之盒