C 언어 는 BMP 이미지 의 읽 기와 쓰기 기능 을 실현 한다.

C 언어 는 BMP 이미지 의 읽 기와 쓰 기 를 실현 한다.
디지털 이미 지 를 처음 접 한 학생 들 에 게 는 BMP 형식의 이미 지 를 어떻게 순수한 C 언어 로 읽 는 지 의문 이 있 을 것 입 니 다.이것 도 디지털 이미지 처리 의 첫 번 째 단계 라 고 믿 습 니 다.만약 에 이 문 서 를 볼 수 있다 면 저 는 다행히 디지털 이미지 처리 길에 있 는 첫 번 째 등불 이 될 것 입 니 다!
BMP 구성 알 아 보기
在这里插入图片描述
이것 이 바로 BMP 이미지 의 이론 지식 입 니 다.대충 알 면 됩 니 다.가장 중요 한 것 은 이론 에서 실천 까지 입 니 다!!
잔말 말고 바로 건어물 에 올 려 라.
코드
헤더 파일 을"bmp.h"로 정의 하고 read 를 정의 합 니 다.bmp 함 수 는 읽 기 함수,write쓰기 함수
bmp 그림 읽 기

#include <stdlib.h>
#include <math.h>
#include <Windows.h>
#include "bmp.h"
/*                */
FILE* fpbmp;
FILE* fpout;
unsigned char* fpBmpHeader;   //   
unsigned char* fpFileHeader;  //    
RGBQUAD* pColorTable;         //BMP    
int read_bmp(const char* path, unsigned char *pBmpBuf,int *Width,int *Height,int * bitCount)
{
	fpbmp = fopen(path, "rb");//path     
	unsigned short s;
	fread(&s, 1, 2, fpbmp);
	//          BMP      "BM"=19778
	if (s == 19778)
	{
		printf("Open bmp success!!!
"); } else { printf("Open bmp fail!!!
"); return -1; } fseek(fpbmp, 0, SEEK_SET); BITMAPFILEHEADER fileHead; fread(&fileHead, sizeof(BITMAPFILEHEADER), 1, fpbmp); BITMAPINFOHEADER infoHead; fread(&infoHead, sizeof(BITMAPINFOHEADER), 1, fpbmp); *Width = infoHead.biWidth;// *Height = infoHead.biHeight;// *bitCount = infoHead.biBitCount; int lineByte = (*Width * *bitCount / 8 + 3) / 4 * 4; fseek(fpbmp, sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) ,SEEK_SET); fread(pBmpBuf, lineByte * *Height, 1, fpbmp);//pBmpBuf RGB , return 0; }
BMP 그림 쓰기

int write_bmp(unsigned char* img, int* Width, int* Height, int* bitCount)
{
	fpout = fopen("out.bmp", "wb+");
	if (fpbmp == NULL)
	{
		printf("read bmp failed!!!
"); return -1; } int lineByte = (*Width * *bitCount / 8 + 3) / 4 * 4; if (lineByte == 0) { printf("err"); return -1; } fpFileHeader = new unsigned char[(sizeof(BITMAPFILEHEADER))]; fseek(fpbmp, 0, SEEK_SET); // fseek(fpout, 0, SEEK_SET); // fread(fpFileHeader, 1, sizeof(BITMAPFILEHEADER), fpbmp); fwrite(fpFileHeader, 1, sizeof(BITMAPFILEHEADER), fpout); /* */ fpBmpHeader = new unsigned char[(sizeof(BITMAPINFOHEADER))]; fseek(fpbmp, sizeof(BITMAPFILEHEADER), SEEK_SET); fseek(fpout, sizeof(BITMAPFILEHEADER), SEEK_SET); fread(fpBmpHeader, 1, sizeof(BITMAPINFOHEADER), fpbmp); fwrite(fpBmpHeader, 1, sizeof(BITMAPINFOHEADER), fpout); fseek(fpout, sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) , SEEK_SET); fwrite(img, lineByte * *Height, sizeof(char), fpout); fclose(fpout); fclose(fpbmp); return 0; }
main 함수 호출

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <Windows.h>
#include "bmp.h"

int main()
{
	int width, height, bitCount = 0;
	unsigned char* pBmpBuf = (unsigned char*)malloc(1000 * 1000 * 3);//    
	const char* path = "D:\\test\\read_bmp_image\\1-B.bmp";//    
	read_bmp(path, pBmpBuf, &width, &height, &bitCount);
	write_bmp(pBmpBuf, &width, &height, &bitCount);
}
총괄,readbmp 함수 가 되 돌아 오 는 pBmpBuf 인자,write 에 할당bmp 함수 의 img 매개 변 수 는 BMP 그림 이 읽 기 에서 쓰기 까지 의 모든 과정 을 실현 하고 관심 이 있 는 학생 들 이 실천 을 하면 의도 적 으로 얻 을 수 없 는 수확 을 얻 을 수 있 습 니 다.
주:온라인 으로 BMP 그림 의 주 소 를 바 꾸 면 모든 형식의 사진 을 BMP 형식 으로 바 꿀 수 있 습 니 다.직접 재 서 잘 쓰다.링크
C 언어 가 BMP 이미 지 를 실현 하 는 읽 기와 쓰기 기능 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 BMP 이미지 읽 기와 쓰기 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기