■■■■■■一个很小的C语言问题!■■■■■■

我写了一个程序,用于读取BMP文件的信息.我用了一个char*BmpData来储存图像数据,但图像数据总是读不出来(其他的信息可以读出).是不是变量的使用有问题?请各位高... 我写了一个程序,用于读取BMP文件的信息.
我用了一个 char *BmpData 来储存图像数据,但图像数据总是读不出来(其他的信息可以读出).是不是变量的使用有问题?
请各位高手指教!

#include"stdio.h"
#include"stdlib.h"

typedef char ElemType;

struct ImgInfo
{unsigned short ImgBitType; //图像位数(色深 x bit)
unsigned short BmpH; //图像高度
unsigned short BmpW; //图像宽度
unsigned short BmpDataPos; //图像数据的起始位置
unsigned long BmpSize; //图像数据大小
unsigned long BmpCompression; //图像是否压缩
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GetBmpInfo(FILE *fpBmp,struct ImgInfo *ImgInfo1) //获取bmp信息,返回图像数据所含字节数 OK
{
fseek(fpBmp,10,0); //读取图像数据的起始位置
fread(&ImgInfo1->BmpDataPos,2,1,fpBmp);

fseek(fpBmp,34,0); //读取图像数据的大小(字节)
fread(&ImgInfo1->BmpSize,4,1,fpBmp);

fclose(fpBmp);
getchar();
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ReadImgData(FILE *fpBmp,struct ImgInfo *ImgInfo1,char *BmpData) //将bmp图像数据读入BmpData中
{
fseek(fpBmp,ImgInfo1->BmpDataPos,0); //文件指针移动到图像数据起始位置
fread(BmpData,ImgInfo1->BmpSize,1,fpBmp);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void Cnvt24bit()
{

FILE *fpBmp,*fpTif; //文件指针

struct ImgInfo ImgInfo1; //储存图像信息
char *BmpData; //储存图像数据

fpBmp=fopen("bmp.bmp","rb"); if(fpBmp==NULL) {printf("Err open file");getchar();} //打开bmp文件

GetBmpInfo(fpBmp,&ImgInfo1); //获bmp信息
BmpData =(char *)malloc(ImgInfo1.BmpSize); if(BmpData==NULL) {printf("Err Malloc");getchar();} //注意要强制转换类型

ReadImgData(fpBmp,&ImgInfo1,BmpData); //读取BMP图像数据
getchar();
}

void main()
{
Cnvt24bit();
}
调试前,请先在程序所在文件夹,用画图生成一个bmp.bmp.

主要问题是char *BmpData的调用是否正确?
它出现在Cnvt24bit()和ReadImgData()中.

j88r - 千总 五级 提到的问题已经改过来了,但还是不行.
展开
 我来答
就烦条0o
推荐于2016-01-25 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
void GetBmpInfo(FILE *fpBmp,struct ImgInfo *ImgInfo1) //获取bmp信息,返回图像数据所含字节数 OK
{
fseek(fpBmp,10,0); //读取图像数据的起始位置
fread(&ImgInfo1->BmpDataPos,2,1,fpBmp);

fseek(fpBmp,34,0); //读取图像数据的大小(字节)
fread(&ImgInfo1->BmpSize,4,1,fpBmp);

fclose(fpBmp);//不应当在这关闭文件
getchar();
}
应当在Cnvt24bit() 的最后关闭

还有什么问题吗,我这可以把数据读出来呀
#include"stdio.h"
#include"stdlib.h"

typedef char ElemType;

struct ImgInfo
{unsigned short ImgBitType; //图像位数(色深 x bit)
unsigned short BmpH; //图像高度
unsigned short BmpW; //图像宽度
unsigned short BmpDataPos; //图像数据的起始位置
unsigned long BmpSize; //图像数据大小
unsigned long BmpCompression; //图像是否压缩
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GetBmpInfo(FILE *fpBmp,struct ImgInfo *ImgInfo1) //获取bmp信息,返回图像数据所含字节数 OK
{
fseek(fpBmp,10,0); //读取图像数据的起始位置
fread(&ImgInfo1->BmpDataPos,2,1,fpBmp);

fseek(fpBmp,34,0); //读取图像数据的大小(字节)
fread(&ImgInfo1->BmpSize,4,1,fpBmp);

//fclose(fpBmp);
//getch();
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ReadImgData(FILE *fpBmp,struct ImgInfo *ImgInfo1,char *BmpData) //将bmp图像数据读入BmpData中
{
fseek(fpBmp,ImgInfo1->BmpDataPos,0); //文件指针移动到图像数据起始位置
fread(BmpData,ImgInfo1->BmpSize,1,fpBmp);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void Cnvt24bit()
{

FILE *fpBmp,*fpTif; //文件指针

struct ImgInfo ImgInfo1; //储存图像信息
char *BmpData; //储存图像数据

fpBmp=fopen("bmp.bmp","rb");
if(fpBmp==NULL)
{
printf("Err open file");
getch();
} //打开bmp文件
fpTif=fopen("bmp1.bmp","wt");
if(fpBmp==NULL)
{
printf("Err open file");
getch();
}
GetBmpInfo(fpBmp,&ImgInfo1); //获bmp信息
BmpData =(char *)malloc(ImgInfo1.BmpSize);
if(BmpData==NULL)
{
printf("Err Malloc");
getch();
} //注意要强制转换类型
ReadImgData(fpBmp,&ImgInfo1,BmpData); //读取BMP图像数据
fwrite(BmpData,ImgInfo1.BmpSize,1,fpTif);
fclose(fpBmp);
fclose(fpTif);
}

int main()
{
Cnvt24bit();
getch();
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linbiyu
2007-04-03
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
图象转换器能用吗?或者用图象解码器!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wx19870618
2007-04-03 · TA获得超过183个赞
知道答主
回答量:34
采纳率:0%
帮助的人:0
展开全部
不知道!!嘿嘿
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式