关于jpg文件格式的探讨

Snow_Ice11111 2006-05-22 01:13:35
如题,想知道jpg图片的大小、颜色位数等基本信息。请大家踊跃发言!网上搜了一下,有一些资料,不过多数是英文的,鲜有中文的关于jpg文件格式方面的说明,请有这方面资料或研究过的朋友提供资料学习一下!谢谢大家的关注和参与!!
...全文
767 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Snow_Ice11111 2007-03-19
  • 打赏
  • 举报
回复
听说4月底要强制结贴,不想让自己的贴子被清除出数据库,还是顶一下吧!去年5月份那次清理的时候,我的好多贴子都没了。
sycnick 2006-05-23
  • 打赏
  • 举报
回复
#define HIMETRIC_PER_INCH 2540 -- Defined in AtlWin.h

一英寸等于25.4毫米
Snow_Ice11111 2006-05-23
  • 打赏
  • 举报
回复
To sycnick(李小虾)朋友:
  HIMETRIC_PER_INCH参数的含义是什么?GDI方面我比较弱,多多请教!
Snow_Ice11111 2006-05-23
  • 打赏
  • 举报
回复
求jpg图片颜色位数:
http://community.csdn.net/Expert/topic/4773/4773262.xml?temp=.4958917

请大家继续捧场&&解惑!
Snow_Ice11111 2006-05-23
  • 打赏
  • 举报
回复
有了大家提供的资料,对jpg文件有初步的认识后,再结合ok1234567(ok1234567)朋友的代码,分析文件来得到图片大小的方法就不难掌握了。至于得到图片颜色位数的方法还不清楚,我再另开贴向各位请教!

感谢朋友们的支持!!准备结贴了,分少了点,要是能发500分或者1000分的贴就好了^_^
DentistryDoctor 2006-05-22
  • 打赏
  • 举报
回复
http://www.moon-soft.com/program/FORMAT/
striking 2006-05-22
  • 打赏
  • 举报
回复
m-a-r-k
ok1234567 2006-05-22
  • 打赏
  • 举报
回复
我的应用是一个Web服务器,对于上传的图片只需知道宽和高,所以直接对于数据流解析是最合理的,如下提供常用的图片格式的size解析与同仁共享。
注明:iWidth传送数据流的大小。

IPicture 不是很好,有相当数量的图片解析不出来
jepg的数据分成很多块,其中包含缩略图,所以,偶尔有图片的高宽被缩略图的高宽骗过了,非常少,正常的图形压缩软件制作的图片是没有问题。

相关资源:http://mti.xidian.edu.cn/multimedia/multi/course1-6-3.html


int ParsePic(BYTE *pHead, int &iWidth, int &iHeight)
{
BYTE n[4];
n[0]=pHead[0];
n[1]=pHead[1];
n[2]=pHead[2];
n[3]=pHead[3];
int i=1;
if(n[0] == 0xFF && n[1] == 0xD8) //jpeg
{
i=iWidth<40000?iWidth-1000:30000;
while(i>20)
{
i--;
if(pHead[i] < 0xC0) continue;
if(pHead[i] > 0xC3) continue;
i--;
if(pHead[i] != 0xFF) continue;
i+=5;
break;
}
if(i<=20) return -1;

iHeight=pHead[i]*256+pHead[i+1];
i+=2;
iWidth=pHead[i]*256+pHead[i+1];
return 0;
}
if(n[0] == 'G' && n[1] == 'I' && n[2] == 'F') //gif
{
iWidth=pHead[7]*256+pHead[6];
iHeight=pHead[9]*256+pHead[8];
return 0;
}

if(n[0] == 'B' && n[1] == 'M') //bmp
{
iWidth=pHead[19]*256+pHead[18];
iHeight=pHead[23]*256+pHead[22];
return 0;
}

if(n[0] == 0x89 && n[1] == 0x50 && n[2] == 0x4E && n[3] == 0x47) //png
{
while(i<iWidth)//length
{
i++;
if(pHead[i] != 0x49) continue;
i++;
if(pHead[i] != 0x48) continue;
i++;
if(pHead[i] != 0x44) continue;
i++;
if(pHead[i] != 0x52) continue;
i++;
if(i > iWidth-10) return -2;
break;
}

iWidth=pHead[i+2]*256+pHead[i+3];
iHeight=pHead[i+6]*256+pHead[i+7];
return 0;
}

return -1;

}
lisypro 2006-05-22
  • 打赏
  • 举报
回复
关注
Kudeet 2006-05-22
  • 打赏
  • 举报
回复
sorry: http://sourceforge.net/projects/jpeg
Kudeet 2006-05-22
  • 打赏
  • 举报
回复
我现在知道的方法只有:
IPicture::get_Width
IPicture::get_Height
而且还不知道这种方法所得到的图片大小(宽和高)的单位是什么,与像素如何换算?惭愧!知道的朋友可以说说吗?
=============
看下面的例子
en: http://msdn.microsoft.com/msdnmag/issues/01/10/c/default.aspx
cn: http://www.vckbase.com/document/viewdoc/?id=1028

真正解析JPEG格式的图像库是, 比如codeproject的CXImage就是用它的
http://sourceforge.net/projects/jpeglib
sycnick 2006-05-22
  • 打赏
  • 举报
回复
// convert himetric to pixels
int nWidth = MulDiv(hmWidth, GetDeviceCaps(hdc, LOGPIXELSX),
HIMETRIC_PER_INCH);
int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY),
HIMETRIC_PER_INCH);
sycnick 2006-05-22
  • 打赏
  • 举报
回复
就冲着这个200分http://bonfig.bokee.com/4058668.html

JPEG 简易文档 V2.14 http://cjhacker.bokee.com/4532186.html
Snow_Ice11111 2006-05-22
  • 打赏
  • 举报
回复
我现在知道的方法只有:
IPicture::get_Width
IPicture::get_Height
而且还不知道这种方法所得到的图片大小(宽和高)的单位是什么,与像素如何换算?惭愧!知道的朋友可以说说吗?
在:
http://community.csdn.net/Expert/topic/4767/4767413.xml?temp=.8597528
贴中看到ok1234567(ok1234567)朋友直接解析文件格式来获取信息,想了解这方面的东西,呵呵
cpio 2006-05-22
  • 打赏
  • 举报
回复

GDI+也行吧
qczl1224 2006-05-22
  • 打赏
  • 举报
回复
想通过代码获取JPG的象素 大小 吗,APL不有这些方法吗?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧