700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言头文件格式图片_请高手赐教C语言图片文件头文件格式的解释 该怎么处理...

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

时间:2020-12-06 07:50:27

相关推荐

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

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

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

网友分享于:-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,但

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

文章评论

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。