本帖最后由 kriass 于 2017-4-10 21:52 编辑
因为项目需要要从内存中读取jpg图片并显示到屏幕上,所以自己就移植了一个Tjpgd的图片解码,但是移植后发现刚调用图片显示函数就会出现HardDefault错误,小白不知道怎么处理,求助大神,代码都在我下面发的链接里面,上传不了附件,只能百度云,十分抱歉顺便问一下,如果直接解码内存中的图片,大概要多久才能解码一张??
还有,如果要传输OV2640摄像头的RGB565数据,该怎么去保存每一帧的RGB565数据呢??板子是F407探索者的,因为我要做一个实时的图像传输功能,STM到STM的。
谢谢各位帮忙。
链接:
http://pan.baidu.com/s/1qXSrtO4 密码:myd1
原子哥,我将你们的图片显示实验的代码中的FATFS系统读取文件改为直接读内存文件,然后发现图片无法显示,修改的代码如下,还希望能麻烦您看一下,也欢迎各路大神出手相救
//图片文件信息,对应FATFS的FIL
typedef struct
{
u8* picPoint; //图片数据流首地址
u32 picSize; //图片大小
u32 readPosition; //图片读取的位置,实现f_read()中的分块读取
}picINFO;
//自己修改的FATFS函数
void picRead(picINFO* picinfo,u8* buff,u32 setSize,u32* readSize) //f_read函数修改
{
u32 i=0;
printf("picRead ");
if((picinfo->readPosition+setSize)>picinfo->picSize)
*readSize=picinfo->picSize-picinfo->readPosition;
else
*readSize=setSize;
if(buff==NULL)
{
picinfo->readPosition+=*readSize;
return;
}
memset(buff,0,setSize);
memcpy(buff,picinfo->picPoint+picinfo->readPosition,*readSize);
picinfo->readPosition+=*readSize;
}
u8 picLseek(picINFO* picinfo,u32 setSize) //f_lseek函数修改
printf("picLseek ");
if(picinfo->readPosition+setSize>picinfo->picSize)
picinfo->readPosition=picinfo->picSize;
else
picinfo->readPosition+=setSize;
return 0;
}
u8 picOpen(picINFO* picinfo,u8* dataPoint) //f_open函数修改
{
printf("picOpen ");
if(dataPoint[0]==0XFF&&dataPoint[1]==0XD8)
{
picinfo->picPoint=dataPoint;
picinfo->picSize=sizeof(dataPoint)/sizeof(u8);
picinfo->readPosition=0;
return 0;
}
printf("not a jpeg file ");
return 1;
}
void picClose(picINFO* picinfo) //f_close函数修改
{
printf("picClose ");
picinfo->picPoint=NULL;
picinfo->picSize=picinfo->readPosition=0;
}
图片是用lwip实验里面的fsmake.exe做的二进制数组,定义是
static const unsigned char jpeg1[] = {
0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,…………,0xff,0xd9,}
搞定了,原来是我的picOpen函数里面的数据大小判断语句出错了。
打扰了,原子哥
一周热门 更多>