|
sizeof 에서 16바이트가 잡히는건 BITMAPFILEHEADER의 첫번째 멤버가 WORD형이어서 그렇습니다
4바이트 align을 하기때문에 걍 쓰면 2바이트가 더잡힙니다. 관련내용이 많이 있으니 찾아보시면 될것 같구요
해결방법은 #pragma pack(1) 로 바이트 단위로 해주시면 14바이트 나옵니다
김시환 님이 쓰신 글 :
: 화면의 영상을 캡쳐해서 bmp 파일로 저장을 하려고 합니다.
: 비트맵의 헤더를 만들기 위해 비트맵헤더 구조체를 이용했는데 저장된 이미지가 계속 잘못된 이미지라고 하면서 그림판 등에서 열리지 않아서 비트맵 이미지의 데이타를 HEX 로 분석을 해 보았더니 문제점이 있더군요..
:
: 첫번째 구조체의 크기에 대한 에러 입니다.
:
: int value ;
: BITMAPFILEHEADER bmphdr ;
: value = sizeof(bmphdr) ;
:
: 위에 구문을 실행하면 value에 16이 저장 됩니다. 실제 BITMAPFILEHEADER 의 크기는 14바이트 입니다.
:
: 두번째 위의 구조체 크기의 문제가 실제 데이타에도 영향을 미칩니다.
: 저장된 이미지를 Hex로 열어보니
:
: BM NUL NUL
: 42,43,00,00
:
: 처음 4바이트에서 BM 뒤에 2바이트 NULL 이 들어가 있습니다.
: 데이타를 저장하는 것은 WriteFile(fh, &bmphdr, sizeof(bmphdr), &nWritten, NULL); 이렇게 했습니다.
:
: 저 2바이트는 도데체 어디서 온 것일까요??
:
: 빌더 6.0 , windows7 32bits 에서 테스트 했습니다.
: 궁금하네요..
:
|