以后都要悬梁刺骨,发奋图强了.
记载自己的学习,工作,成长,感悟.
#if 1
char buff_filename[FILE_LEN];
FILE *fp;
U16 file_length=0,i=0;
sprintf(buff_filename,"/mnt/part1/%s",player_fileinfo.file_name);
fp=fopen(buff_filename,"rb");
fseek(fp,0L,SEEK_END);
file_length=ftell(fp);
fseek(fp,0L,SEEK_SET);
if(fp!=NULL)
{
U8 markID=0;
for(i=0;i<file_length;i++)
{
fseek(fp,i,SEEK_SET);
fread(&markID,1,1,fp);
if(markID==0xFF)
{
fseek(fp,i+1,SEEK_SET);
fread(&markID,1,1,fp);
if(markID==0xc0)
{
printf("current_position=%dbytes/n",ftell(fp));
U16 buff,width,heigth;
fseek(fp,i+1+4,SEEK_SET);
fread(&buff,2,1,fp);
heigth=(buff<<8)|(buff>>8);
fseek(fp,i+1+6,SEEK_SET);
fread(&buff,2,1,fp);
width=(buff<<8)|(buff>>8);
printf("width=%d,heigth=%d/n",width,heigth);
break;
}
}
}
}
fclose(fp);
#endif
JPG图片文件头解析图片的宽高........
8个段,每个段的最大长度为65535,但一般都不固定也没有到最大长度:
- SOI 0xD8 图像开始
- APP0 0xE0 JFIF应用数据块
- APPn 0xE1 - 0xEF 其他的应用数据块(n, 1~15)
- DQT 0xDB 量化表
- SOF0 0xC0 帧开始
- DHT 0xC4 霍夫曼(Huffman)表
- SOS 0xDA 扫描线开始
- EOI 0xD9 图像结束
解析图片的时候,一般都先找到以上段的标志,紧接着标志的是该段的长度,两个字节..
图片宽高在SOF0段,先找0xFFC0标志,再偏移三个字节就到高度的位置,为两个字节,且为低字节在前,处理一下就得到JPG图片的高度.
图片的宽度紧接着高度为两个字节,处理同上.