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;
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章