免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5682 | 回复: 6
打印 上一主题 下一主题

[C] 那位解析过jpg文件格式 谁知道宽高保存在那里。我google了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-27 18:04 |只看该作者 |倒序浏览
那位解析过jpg文件格式   谁知道宽高保存在那里

我google了  都说在ffc0后3位,可我这里有个ps做的,后3位的宽高数据居然不对 ,但是acdsee打开却没有问题


(5)SOF(Start of Frame) 在基本系统中,只处理SOF0

标记结构       字节数    意义

0XFF             1

0XC0             1

Lf                  2            SOF标记码长度,不包括前两个字节0XFF,0XC0

P                   1            基本系统中,为0X08

Y                   2            图象高度

X                   2            图象宽度

Nf                 1            Frame中的成分个数,一般为1或3,1代表灰度图,3

上面是我找到的资料

就是下面这个图

论坛徽章:
0
2 [报告]
发表于 2012-11-27 15:31 |只看该作者
我现在集中回复我以前发的SB帖子,我错了,我n年前太菜了,让大家见笑了



终于可以说点什么了
  1. struct Size getjpgwh( char* strjpgpath )
  2. {
  3.         //find last 0xFF0xC0 and jump 4byte  
  4.         long llen,pos,i;
  5.         unsigned char* bs;
  6.         FILE *fp = fopen(strjpgpath,"r");
  7.         struct Size jpgsize;
  8.         short s=0;
  9.         char*p;
  10.         if(fp==NULL)
  11.                 return jpgsize;
  12.         pos=0;
  13.         fseek(fp,0,SEEK_END);
  14.         llen= ftell(fp);//get File Length
  15.         bs = (char*)malloc( llen );
  16.         fseek(fp,0,SEEK_SET);
  17.         fread(bs,1,llen,fp);
  18.         for( i=0;i<llen-2;i++ )
  19.                 if( bs[i]==0xFF &&bs[i+1]==0xC0 )
  20.                         pos=i;

  21.         p=(char*)&jpgsize.h;
  22.         p[1]=bs[pos+5];
  23.         p[0]=bs[pos+6];
  24.         p=(char*)&jpgsize.w;
  25.         p[1]=bs[pos+7];
  26.         p[0]=bs[pos+8];

  27.         close(fp);
  28.         free(bs);
  29.         return jpgsize;
  30. }
复制代码

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
3 [报告]
发表于 2012-11-27 22:44 |只看该作者
回复 2# houtinghua


    你这代码有待改进:
1)返回结构体
2)如果文件打开失败,返回值是啥意识?
3)从效率上考虑,没必要读取整个文件
4)你这代码运行过吗?混用fopen和close
。。。。。。。。。。。。。。。

论坛徽章:
0
4 [报告]
发表于 2012-11-28 04:09 |只看该作者
plz search into libjpeg source code.

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
5 [报告]
发表于 2012-11-28 08:32 |只看该作者
补充:
5)lz你那个for循环,如果找到pos了,退出即可。
6)lz对jpeg格式理解不够。

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
6 [报告]
发表于 2012-11-28 08:39 |只看该作者
最后由于对jpeg文件格式的理解问题,lz的程序对一些图片会得到错误的结果。

论坛徽章:
0
7 [报告]
发表于 2012-11-28 10:16 |只看该作者

1效率确实有问题
2居然混用了fopen和close,看来是我错了
3jpg的来源是固定由公司另外一个工具生成的,。net的库,所以jpg格式固定,所以取错的可能性比较低,所以没有做错误处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP