■■■■■■一个很小的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 - 千总 五级 提到的问题已经改过来了,但还是不行. 展开
我用了一个 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 - 千总 五级 提到的问题已经改过来了,但还是不行. 展开
3个回答
展开全部
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();
}
{
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();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
图象转换器能用吗?或者用图象解码器!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道!!嘿嘿
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询