JPG图片的高宽解析.

以后都要悬梁刺骨,发奋图强了.

记载自己的学习,工作,成长,感悟.

 

 

#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,但一般都不固定也没有到最大长度:

  1. SOI  0xD8            图像开始
  2. APP0 0xE0            JFIF应用数据块
  3. APPn 0xE1 - 0xEF    其他的应用数据块(n, 1~15)
  4. DQT  0xDB           量化表
  5. SOF0 0xC0            帧开始
  6. DHT  0xC4           霍夫曼(Huffman)表
  7. SOS  0xDA           扫描线开始
  8. EOI  0xD9            图像结束

解析图片的时候,一般都先找到以上段的标志,紧接着标志的是该段的长度,两个字节..

图片宽高在SOF0段,先找0xFFC0标志,再偏移三个字节就到高度的位置,为两个字节,且为低字节在前,处理一下就得到JPG图片的高度.

图片的宽度紧接着高度为两个字节,处理同上.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值