bmp图像保存后为什么无法打开(c编写的程序需输入图片路径)

[复制链接]
查看11 | 回复1 | 2009-3-13 23:24:55 | 显示全部楼层 |阅读模式
#include"stdio.h"
#include"stdlib.h"
#include
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信息
{
fseek(fpBmp,10,0); //读取图像头文件的偏移量
fread(&ImgInfo1->BmpDataPos,2,1,fpBmp);
printf("%d\n",ImgInfo1->BmpDataPos);
fseek(fpBmp,34,0); //读取图像数据的大小(字节)
fread(&ImgInfo1->BmpSize,4,1,fpBmp);
printf("%ld\n",ImgInfo1->BmpSize);
//fclose(fpBmp);
//getch(); lmue
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ReadImgData(FILE *fpBmp,struct ImgInfo *ImgInfo1,char *BmpData,unsigned char* head) //将bmp图像数据读入BmpData中
{ fread(head,ImgInfo1->BmpDataPos,1,fpBmp);
fseek(fpBmp,ImgInfo1->BmpDataPos,0); //文件指针移动到图像数据起始位置
fread(BmpData,ImgInfo1->BmpSize,1,fpBmp);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Cnvt24bit()
{ struct ImgInfo ImgInfo1; //储存图像信息
FILE *fpBmp,*fpTif; //文件指针
char *BmpData; //储存图像数据
char filename[128];//文件名
printf("name of the file:");
scanf("%s",filename);
fpBmp=fopen(filename,"rb"); //打开文件
if(fpBmp==NULL)
{
printf("Err open file");
getch();
} //打开bmp文件
GetBmpInfo(fpBmp,&ImgInfo1); //获bmp信息
BmpData =(char *)malloc(ImgInfo1.BmpSize);
unsigned char *header=(unsigned char *)malloc(ImgInfo1.BmpSize);
if(BmpData==NULL)
{
printf("Err Malloc");
getch();
} //注意要强制转换类型
ReadImgData(fpBmp,&ImgInfo1,BmpData,header); //读取BMP图像数据
printf("name of the file:");
scanf("%s",filename);
fpTif=fopen(filename,"wt");
if(fpTif==NULL)
{
printf("Err open file");
getch();
}
fwrite(header,sizeof(unsigned char),ImgInfo1.BmpDataPos,fpTif);
fwrite(BmpData,sizeof(char),ImgInfo1.BmpSize,fpTif);
fclose(fpBmp);
fclose(fpTif);
}
void main()
{
Cnvt24bit();
getch();
}

回复

使用道具 举报

千问 | 2009-3-13 23:24:55 | 显示全部楼层
http://adultedu.ustc.edu.cn/img/pap/hl/我给你提供个网站 你自己仔细看一下 希望对你有所帮助.....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行