永发信息网

用c语言如何读取和保存jpg图片文件?

答案:4  悬赏:30  手机版
解决时间 2021-01-24 12:29
  • 提问者网友:蔚蓝的太阳
  • 2021-01-23 19:15
用c语言如何读取和保存jpg图片文件?
最佳答案
  • 五星知识达人网友:过活
  • 2021-01-23 19:32
有这样一个二进制文件,大小在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楼网友:山河有幸埋战骨
  • 2021-01-23 21:20
用hafuman转码接口函数就可以转换了
  • 2楼网友:玩家
  • 2021-01-23 21:06
图片文件需要解码,解码后,可以用open函数直接打开,记得打开选项要设置成同步,然后就可以修改图片内容,程序运行完,图片就已经被更改了,也就是说已经自动保存了
  • 3楼网友:怙棘
  • 2021-01-23 20:27
VC中,使用getimage();putimage()函数或是loadimage();putimage函数读取并显示图片,而getimage()与loadimage()函数都要定义一个保存图像信息的指针追问谢谢!我已解决。用c。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯