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 이미지 읽 기와 쓰기 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.