|
아래 코드를 visual studio 에서는 동작하는데.
이상하게 builder에 서 수행하면 출력된 bmp 의 헤더에 이상이 있다고 나옵니다.
ms 와 다른가요?
감사합니다.
#include <WINDOWS.H>
#include <stdio.h>
#include <stdlib.h>
#define BMP_FILE_NAME 0x4d42 //BM
#define HEIGHT 256 //이미지의 세로 길이
#define WIDTH 256 //이미지의 가로 길이
#define COLOR 256 //COLOR 수
BYTE Bmp_buffer[HEIGHT][WIDTH];//RAW FILE을 읽에 들이기 위한 저장 공간
//---------------------------------------------------------------------------------
//RAW FILE을 읽는 함수
void Raw_File_Read()
{
FILE *in;
char fname[50];
printf("Read File Name or Path=");
gets(fname);
if((in=fopen(fname,"rb"))==NULL) EOF;
int i,j;
for(i=HEIGHT-1;i>=0;i--)
{
for(j=0;j<WIDTH;j++)
Bmp_buffer[i][j]=fgetc(in);
}
fclose(in);
}
//---------------------------------------------------------------------------------
//BMP FILE을 기록하는 함수
void Raw_to_Bmp(BITMAPFILEHEADER Bmfh,BITMAPINFOHEADER Bmih,RGBQUAD Bmp_pal[COLOR])
{
FILE *out;
char fname[50];
printf("Write File Name or Path=");
gets(fname);
if((out=fopen(fname,"wb"))==NULL) EOF;
fwrite(&Bmfh,sizeof(BITMAPFILEHEADER),1,out);
fwrite(&Bmih,sizeof(BITMAPINFOHEADER),1,out);
fwrite(Bmp_pal,sizeof(RGBQUAD),COLOR,out);
fwrite(Bmp_buffer,sizeof(BYTE),HEIGHT*WIDTH,out);
fclose(out);
}
//---------------------------------------------------------------------------------
//MAIN 함수
void main(void)
{
int i;
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
RGBQUAD bmp_pal[COLOR];
//BITMAPFILEHEADER 설정
bmih.biSize=sizeof(BITMAPINFOHEADER);
bmih.biWidth=WIDTH;
bmih.biHeight=HEIGHT;
bmih.biPlanes=1;
bmih.biBitCount=8;
bmih.biCompression=BI_RGB;
bmih.biSizeImage=WIDTH*HEIGHT;
bmih.biXPelsPerMeter=0;
bmih.biYPelsPerMeter=0;
bmih.biClrUsed=COLOR;
bmih.biClrImportant=0;
//BITMAPINFOHEADER 설정
bmfh.bfType=BMP_FILE_NAME;
bmfh.bfSize=sizeof(BITMAPFILEHEADER)+((COLOR)*sizeof(RGBQUAD))+sizeof(BITMAPINFOHEADER)
+bmih.biSizeImage;
bmfh.bfReserved1=0;
bmfh.bfReserved2=0;
bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)
+(COLOR*sizeof(RGBQUAD));
//PALETTE 설정
for(i=0;i<COLOR;i++) //8bit-> 256 monochrome 설정
{
bmp_pal[i].rgbRed=i;
bmp_pal[i].rgbGreen=i;
bmp_pal[i].rgbBlue=i;
bmp_pal[i].rgbReserved=0;
}
Raw_File_Read();
Raw_to_Bmp(bmfh,bmih,bmp_pal);
}
|