컴퓨터 과학 & 영상처리 관련/영상처리 bmp파일 열기. 저장하기 꺄뜨르 2013. 9. 9. 19:29 BYTE* openFile(char* openFileName, //str 파일명으로 파일 열기 BITMAPFILEHEADER* filehead, BITMAPINFOHEADER* imghead, RGBQUAD* pallete ) { pallete = NULL; int palleteSize = 0; FILE* inputFile = fopen(openFileName, "rb"); //파일을 일단 열고 if(inputFile ==NULL) { printf("There is no file!!!\n"); exit(1); //없으면 에러고 } fread(filehead,sizeof(BITMAPFILEHEADER),1,inputFile ); if(filehead->bfType!=0x4D42) exit(1); //파일 형식이 bmp 아니면 종료, 0x4D42는 BM임. bftype은 파일형식 fread(imghead,sizeof(BITMAPINFOHEADER),1,inputFile); if(imghead->biBitCount == 8) { pallete = new RGBQUAD[256]; fread(pallete, sizeof(RGBQUAD), 256, inputFile); } BYTE* src = new BYTE [imghead->biWidth * imghead->biHeight * imghead->biBitCount/8]; fread(src, sizeof(char), imghead->biWidth * imghead->biHeight * imghead->biBitCount/8, inputFile); fclose(inputFile); return src; } void saveFile(char* saveFileName, BYTE* img, BITMAPFILEHEADER bmpHederFile, BITMAPINFOHEADER hederInfo, RGBQUAD hRGB[], int rgbQuadSize) //str 파일명으로 파일 저장 { //여기에서 영상 사이즈,컬러,팔레트 등을 다 이미 가지고 있는 다음에 그 정보를 저장해야됨 //BITMAPFILEHEADER bmpHederFile; //파일헤더 구조체 //BITMAPINFOHEADER hederInfo; //영상헤더라 부르니?) //RGBQUAD hRGB[256]; FILE* outfile = fopen(saveFileName,"wb"); fwrite(&bmpHederFile,sizeof(char),sizeof(BITMAPFILEHEADER),outfile); //bmp 헤더 fwrite(&hederInfo,sizeof(char),sizeof(BITMAPINFOHEADER),outfile); //info헤더 fwrite(hRGB,sizeof(RGBQUAD),256,outfile); //256색인듯? fwrite(img,sizeof(char),hederInfo.biSizeImage,outfile); //OutImg의 내용을 쓰기 }