|
typedef struct bmp_header_rec{
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
RGBQUAD colors[2];
} bmp_header;
void get_header()
{
bmp_header bmph;
p_img_mem = "비트멥파일의 시작 포인터지정";
bmph = *((bw_bmp_header *) p_img_mem);
}
위에서의 방법으로 하면 bmph.bfh 만 정확한 데이터값이 들어옵니다.
뒤에는 이상한 값이 들어옴.
위의 코드는 비주얼C++ dos format으로 잘 작동됨...
빌더에서 해보니 나누어서 해줘야 들어오더군요.
아래와 같이.
bmph.bfh = *reinterpret_cast<BITMAPFILEHEADER *> (p_img_mem);
bmph.bih = *reinterpret_cast<BITMAPINFOHEADER *> ((p_img_mem + sizeof(bmph.bfh)));
bmph.colors[0] = *reinterpret_cast<RGBQUAD *> ((p_img_mem + sizeof(bmph.bfh) + sizeof
(bmph.bih)));
bmph.colors[1] = *reinterpret_cast<RGBQUAD *> ((p_img_mem + sizeof(bmph.bfh) + sizeof
(bmph.bih)+sizeof(RGBQUAD) ));
왜그럴까요? bfh와 bih, bih와 collors사이에 1byte씩이 들어가는것 같은데 이유가 뭐죠
아시는분 저의 미칠것같은 궁금증좀 풀어주세요.. 잠이 안와요....
즐거운 하루 되시길...
|