附件为测试图片:
建议大家先用测试图片对原子哥的原来代码进行测试,电脑上观看此图的时候,交叉是红色的,周围是白色的,如果用原子哥原来的代码解码此图,会导致交叉是黑色的,周围是黄色的。
形成此BUG的主要原因是,解码程序在解码32位BMP图的时候,弄错了图中的颜色顺序导致,另外本人尝试修改该BMP解码,让其在使用显存的情况下,支持透明的BMP图显示,尚未实现,修改alpha后,现象为不管图有没有东西,都不显示。
以下代码是在不支持alpha的基础上,修改了一下32位BMP图的显示顺序,让其正确解码32位BMP,本修改只需要找到对应的这部分进行顺序修改即可,下面是修改好了的代码:
}else if(color_byte==4)//32位颜色图
{
switch (rgb)
{
case 1:
color=bmpbuf[count]>>3; //B
break ;
case 2:
color+=((u16)bmpbuf[count]<<3)&0X07E0;//G
break;
case 3 :
color+=((u16)bmpbuf[count]<<8)&0XF800;//R
break ;
case 0 :
//alphabend=bmpbuf[count];//不读取 ALPHA通道
break ;
} |