c语言头文件格式图片_请高手赐教C语言图片文件头文件格式的解释,该怎么处理...

当前位置:我的异常网» C语言 » 请高手赐教C语言图片文件头文件格式的解释,该怎么

请高手赐教C语言图片文件头文件格式的解释,该怎么处理

www.myexceptions.net  网友分享于:2013-03-16  浏览:11次

请高手赐教C语言图片文件头文件格式的解释

FILE   *fp;

unsigned   char   *pRGB,*pr,*pg,*pb,*pR,*pG,*pB;

int   j,i;

unsigned   int   *pk;

pRGB=(unsigned   char   *)headerImage;//为unsigned   char   headerImage[54]

for   (   i=0;i <54;i++,pRGB++   )(*pRGB)=0;

pRGB=(unsigned   char   *)headerImage;

(*pRGB)=0x42;   pRGB++;//   BM

(*pRGB)=0x4d;   pRGB++;

pRGB+=2;

pk=(unsigned   int   *)pRGB;   (*pk)=14+40+180*144*3;//   size

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=0;//   reserved

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=54;//   image   offset

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=40;//   struct   size

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=720;//   width

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=576;//   height

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=0x180001;//   Planes   &   BitCount

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=0;//   Compression

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=720*576*3;//   image   size

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=3780;//   x   pixels/m

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=3780;//   y   pixels/m

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=0;//   color   used

pRGB+=4;

pk=(unsigned   int   *)pRGB;   (*pk)=0;//   important   color

if   (   fp=fopen( "video.bmp ", "wb+ ")   )

{

printf( "Create   a   file   named   Video.bmp\n ");

pRGB=headerImage;/***************************/

fwrite(pRGB,2,1,fp);/***************************/

fwrite(pRGB+4,52,1,fp);/***************************/

pR=m_dbTargetImageR+720*575;

pG=m_dbTargetImageG+720*575;

pB=m_dbTargetImageB+720*575;

printf( "Saving   image   data...\n ");

for   (   j=0;j <576;j++   )

{

pr=pR;   pg=pG;   pb=pB;

for   (   i=0;i <720;i++,pr++,pg++,pb++   )

{

fwrite(pb,1,1,fp);

fwrite(pg,1,1,fp);

fwrite(pr,1,1,fp);

}

pR-=720;

pG-=720;

pB-=720;

if   (   j%57==0   )

printf( "     completed   %d%%\n ",j/57*10);

}

fclose(fp);

printf( "Finished.\n ");

}

此段代码主要就是把内存中的m_dbTargetImageR,m_dbTargetImageG

m_dbTargetImageB这几个首地址的数组的内容写到文件中.

我的问题是在代码中后面用*号注明的那段代码,headerImage这个数组的大小明明是54,为什么在第一个数据块输出函数fwrite(pRGB,2,1,fp);(其中pRGB指向headerImage的首地址,)执行后,第二个fwrite(pRGB+4,52,1,fp);中的地址为什么要加4后,还要输出52个到fp中,那不就地址越界了吗?我的理解是在执行完第一个数据块输出函数fwrite(pRGB,2,1,fp);后应该执行数据块输出函数fwrite(pRGB+2,52,1,fp);这才对.可实验表明我是错的,请高手指出我的原因!!

------解决方案--------------------

(*pRGB)=0x42; pRGB++;// BM

(*pRGB)=0x4d; pRGB++;

pRGB+=2; // 这里多加了2 后面+4,可能是为了跳过这个+2,但

程序整体怎么感觉还有问题,前面的代码是什么

文章评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值