大大来帮帮忙。。。谢谢

tcwn_feng 2008-03-17 02:34:59
问一下
用vs怎么实现将一个bmp图像转换成二进制流啊。。。
谢谢。。。
...全文
73 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuqiu173 2008-03-18
  • 打赏
  • 举报
回复
以下代码打开的是24位BMP,打开的时候以二进制方式打开就行了


int OpenAndResult1(char FileName[],double *resultbmp)
{
//unsigned char *buffer = NULL;//存储指针表的数据

int g_Height=0;//位图高
int g_Width=0;//位图宽
int g_Bitcount=0;//位图颜色位数

//////////////////////////获取图片的高宽及像素位数/////////////////////////////////////////////////////////////////////////
FILE *fp;

if((fp=fopen(FileName,"rb"))==NULL) //打开文件,并且判断文件是否存在
{
printf("open the file error!\n");
return -1;
}


fseek(fp,18,SEEK_SET);
fread(&g_Width,4,1,fp); //图象宽度 ok
fread(&g_Height,4,1,fp); //图象长度 ok
fseek(fp,14+4+4+4+2,SEEK_SET);
fread(&g_Bitcount,2,1,fp); //颜色数1,4,8,24,32


if( g_Bitcount != 24 )//是否24位
{
printf(" the file isn't 24\n");
return -2;
}

/////////////////// 图片定位 /////////////////////////////////////////////////////////////////////////////////////1


//int i,j;

int lLineBytes24 = ((g_Width * 3 + 3)>>2)<<2;//24位图片,必须是4的倍数,(原图片的每行字节数)
int lLineByte256 = (g_Width+3)/4*4;//<<2)>>2;//256色图片每行字节数

///////// 把图片数据考到内存中(以便对图片操作速度快) ////////////
unsigned char *copytobuffer = NULL;//存储图片的数据

copytobuffer = (unsigned char *)calloc(g_Height * lLineBytes24 + 1,sizeof(unsigned char));
if( NULL == copytobuffer)
{
printf(" the copytobuffer is failure of allocation Memory\n");
return -3;
}

fseek(fp, 54, SEEK_SET );
fread(copytobuffer,1,g_Height * lLineBytes24,fp);//*/

fclose(fp);

return 1;
}
paidfighting 2008-03-18
  • 打赏
  • 举报
回复
up
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-17 02:34
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下