由于需要,就把战舰板的SPI方式的SD卡,改为SDIO工作方式,图片显示程序,用的也是战舰版的图片显示例题PICTURE, 移植后,发现,当显示bmp格式的图片时,正常,
可在显示同一张图片的jpe格式时,就不正常,好像在显示头几行时,还正常,往下就乱套了,无法正常显示JPEG格式的图片了。
开始,我没把这个问题看重了,认为还是很好解决了,因为同是图片解码,既然bmp好用,这说明,初始化时的 LCD 画点,画线,画圆等接口程序肯定没有问题,问题肯定
是出在JPEG解码上,可是我费了几天时间,还是没有排除这个问题,所以还是要请教原子老师和其他能人,怎么能够解决这个问题呢?
根据我几天的跟踪排查,问题确实是出在智能画图程序里的jpeg格式分支后,见下程序:
u8 ai_load_picfile(const u8 *filename,u16 x,u16 y,u16 width,u16 height) //智能画图 {
u8 res;//返回值
u8 temp;
if((x+width)>lcddev.width)return PIC_WINDOW_ERR; //x坐标超范围了.
if((y+height)>lcddev.height)return PIC_WINDOW_ERR; //y坐标超范围了.
。。。。。。。。。。
。。。。。。。。。。
//文件名传递
temp=f_typetell((u8*)filename); //得到文件的类型
switch(temp) //根据得到的解码类型,开始解码了
{
case T_BMP:
res=stdbmp_decode(filename); //解码bmp
break;
//------------------------------------------------------------------------
case T_JPG:
case T_JPEG:
res=jpg_decode(filename); /*解码JPG/JPEG*/ 【问题就出在这个分支以后了】
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
break;
// ---------------------------------------------------------------------
case T_GIF:
res=gif_decode(filename,x,y,width,height); //解码gif
break;
//-------------------------------------------------------------------------
default:
res=PIC_FORMAT_ERR; //非图片格式!!!
break;
}
return res;
}
//=========================================================================================================
修改了JPEG解码程序里好多地方,还是不见效果,JPEG解码还是很复杂的,我这个小学生还能解决这么大的问题?所以还是厚着脸皮,再求教原子老师,问题出在哪里?这个和改SDIO有关系吗?
为什么bmp图片能解码成功呢?
下面发几张解码显示的照片,第1.2张 是:''荷花" 的 bmp 和 jpeg两个格式,bmp的显示正常,jpeg的就不正常,好像开始显示几行,就乱套了,不成图片了;第3,4张是“科技之光”
的 bmp 和 jpeg两个格式 ,bmp的女孩显示正常,
jpeg的女孩就显示不正常,好像开始显示几行也是对的,往下也不行了,显示混乱啦。
|