24位bmp图像的数据读取&存储

24位bmp文件的读取&存储

我采用的方法是将图像文件读取,存储到一维数组中,以便后期的操作。

 

 void checkFileExist(FILE * fpbmp)
{
    //打开图片文件 按照二进制读取
    if (fpbmp == NULL)
    {
        printf("当前打开的文件不存在!\n");
        exit(1);
    }
}


void readFile(FILE * pfInput, BITMAPFILEHEADER &fileHeader, BITMAPINFOHEADER &infoHeader)
{
	//ReadtheBitmapfileheader;
	fread(&fileHeader, sizeof(BITMAPFILEHEADER), 1, pfInput);
	//ReadtheBitmapinfoheader;
	fread(&infoHeader, sizeof(BITMAPINFOHEADER), 1, pfInput);

}


void checkInput(BITMAPINFOHEADER infoHeader, BITMAPFILEHEADER fileHeader)
{
	if (fileHeader.bfType != BM)
	{
		printf("This file is not bmp file.!!!\n");
		exit(1);
	}
	if (infoHeader.biBitCount != 24)
	{
		printf("当前打开的文件不是24位的bmp图,请检查后重启!\n");
		printf("当前的位数为:%d\n", infoHeader.biBitCount);
		exit(1);
	}
	else
	{
		printf("当前输入文件为:24位bmp图片\n");
	}
}


void readWidthHeight(FILE *bfIn, BITMAPINFOHEADER infoHeader, int &original_width, int &original_height)
{
	original_width = infoHeader.biWidth;
	original_height = infoHeader.biHeight;
}


void bfWriteHead(FILE *bfIn, FILE *bfOut, BITMAPFILEHEADER &fileHeader)
{	//位图头文件

	fseek(bfIn, 0L, SEEK_SET);
	fseek(bfOut, 0L, SEEK_SET);

	fwrite(&fileHeader, sizeof(BITMAPFILEHEADER), 1, bfOut);
}

图像信息数据存储

void dataWrite(FILE *bfIn, FILE *bfOut,BITMAPINFOHEADER infoHeader,int original_width, int original_height)
{

	fseek(bfIn, 54L, SEEK_SET);
	int lineByte = WIDTHBYTES(original_width * infoHeader.biBitCount);	
	int l_width2 = WIDTHBYTES(original_height * infoHeader.biBitCount);	//计算位图的实际宽度并确保它为4byte的倍数

	unsigned char *data_original = (unsigned char*)malloc(sizeof(char)*original_height*lineByte);
	if (data_original == NULL) {
		printf("malloc failed\n");
	}
	memset(data_original, 0, original_height*lineByte);
	fread(data_original, sizeof(char), lineByte*original_height, bfIn);	//读取输入文件的数据信息

	//……
    //此处是具体的图像处理代码

	free(data_original);
	data_original = NULL;
}

猜你喜欢

转载自blog.csdn.net/wennyLee/article/details/84062920