노무현 대통령 배너
[C] Bitmap 파일 생성 예제

Bitmap 이미지 파일을 생성하는

예제 프로그램입니다.

Bitmap 파일 포맷을 공부하기 위해

한번 만들어봤습니다.

개발환경
Gentoo Linux 2.6.32-r2
gcc 4.4.2


#include<stdio.h>
#include<string.h>
#include<fcntl.h>

#pragma pack(2)
typedef struct {
	unsigned short int type;	    //Magick indentifier
	unsigned int size;			    //file size in bytes
	unsigned short int reserved1, reserved2;
	unsigned int offset;		   //Offset to image data 
} BITMAPFILEHEADER;

typedef struct {
	unsigned int size;			    //header size in bytes
	int width, height;			    //Width, Height of image
	unsigned short int planes;	    //Number of Colour planes
	unsigned short int bits;	            //Bit per pixel
	unsigned int compression;	    //Compression type
	unsigned int imagesize;	    //Image size
	int xresolution, yresolution;	    //Pixel per meter
	unsigned int ncolours;		    //Number of Colours
	unsigned int importantcolours;	//Important Colours
} BITMAPFILEINFOHEADER;

#pragma pack()

int main(int argc, char **argv)
{
	int i = 0;
	int fd = 0;
	int ret = 0;
	char imagedata[100*100*3];

	BITMAPFILEHEADER header;
	BITMAPFILEINFOHEADER infoheader;

	fd = open("bitmap.bmp", O_CREAT | O_RDWR, 0);
	if(fd < 0)
	{
		fprintf(stderr, "Error : Can't create or open file\n");
		return -1;
	}

	memset(imagedata, 0x00, sizeof(imagedata));

	for(i = 0 ; i<100*100*3 ; i = i + 3)
	{
		//blue
		imagedata[i] = 0xFF;
		//green
		imagedata[i+1] = 0;
		//red
		imagedata[i+2] = 0;

	}

	memset(&infoheader, 0x00, sizeof(infoheader));

	infoheader.size = sizeof(infoheader);
	infoheader.width = 100;
	infoheader.height = 100;
	infoheader.planes = 1;
	infoheader.bits = 24;
	infoheader.compression = 0;
	infoheader.imagesize = sizeof(imagedata);
	infoheader.xresolution = 2000;
	infoheader.yresolution = 2000;
	infoheader.ncolours = 0;
	infoheader.importantcolours = 0;

	memset(&header, 0x00, sizeof(header));

	header.type = 0x4D42;
	header.size = sizeof(header) + sizeof(infoheader) + 100*100*4;
	header.offset = sizeof(header) + sizeof(infoheader);

	write(fd, &header, sizeof(header));
	write(fd, &infoheader, sizeof(infoheader));
	write(fd, imagedata, sizeof(imagedata));

	close(fd);
	return 0;
}
Posted by ExSuperstar

 Track this back : http://exsuperstar.net/trackback.php?blogid=404
Commented by 임승욱 at 2010/02/02/ 09:49
죄송한데요.. gtk에서 progress와 timer 사용한 소스를 wxWidgets 형식으로
바꿔서 보여주실 수는 없나요?
제가 wxwidgets에서 wxtimer를 이용해서 버튼 클릭시 1초마다 패널에 그림이 나오게
하려고 하는데 이 소스를 참고 하려고 합니다.
그런데 wxtiemr 에 대한 개념을 잘 못 잡겠네요.
혹시 바꿔 주실 수 있으면 고맙겠습니다..
2주가 지나가는데 진도가 나가지 않고 있으니 참 답답하네요.
밑에다가 댓글 달려니깐 오래된 글이라서 댓글이 안
달리네요.
Commented by ExSuperstar at 2010/02/04/ 05:48
임승욱// 방문해 주셔서 감사합니다. 포스팅 할테니 참조하세요 ㅋ

Name   Email   Homepage