C语言如何读取jpg格式的图片

C语言如何读取jpg格式的图片,第1张

有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下:

无关数据

JPG图片数据区

无关数据区

JPG图片数据区

无关数据区

JPG图片数据区

......

已知JPG图片起始标志为:“FF D8 FF E0 00 10 4A”,结束标志为:“FF D9”。

现想把这些JPG图片数据从该文件中读出来,生成一个个单独的图片文件,该如何做呢?

帮你写了个程序, 测试了只含有一个图片信息的文件

int len=0

int filesn=0

void ReadJpg(CFile *sfp,const char *dstfile,unsigned char a,unsigned char b)

{

CFile nf

nf.Open(dstfile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary)

unsigned t=0,t1=0

nf.Write(&a,sizeof(char))

nf.Write(&b,sizeof(char))

while(1)

{

sfp->Read(&t,sizeof(char))

len++

nf.Write(&t,sizeof(char))

if(t==0xFF)

{

sfp->Read(&t1,sizeof(char))

len++

if(t1==0xD9)

break

else

nf.Write(&t1,sizeof(char))

}

}

nf.Close()

}

调用:

void test()

{

CFile fp

fp.Open("86b05621.jpg",CFile::modeRead|CFile::typeBinary)//文件名改一下

unsigned char a=0,b=0

len=0

while(1)

{

fp.Read(&a,sizeof(char))

len++

if(len>=fp.GetLength())

break

if(a==0xFF)

{

fp.Read(&b,sizeof(char))

len++

if(b==0xD8)

{

filesn++

char filename[256]

sprintf(filename,"Jpg %d.jpg",filesn)

ReadJpg(&fp,filename,a,b)

}

}

}

fp.Close()

}

思路是,先得到FF的值,然后再判断下一位是否是0xD8, 但这里要说明一下,如果你的其它数据信息里也含有FF D8值的话就会出错了, 所以为保险起见,应该再多比较几位, JPG的头是固定的,再往下就是EF E0 00 1E, 建议楼主再往下比较四位比较保险(在程序中稍作修改即可)

你是不是在 分析某个 游戏的或程序的资源文件呀,如果是的话,这个资源文件应该配有一个 索引文件!或在其文件自身。索引可以列表索引,链表形示……

如果是你自已生成的文件包,最好加上索引,因为这样可以提高效率!

1、首先jpg是面向连续色调静止图像的一种压缩标准,可在c语言程序中读取。

2、其次点击“imread”命令,点击图片读取成数值矩阵。

3、最后显示的数值即是矩阵的读取值。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11576643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存