2011-04-08 5 views
0

방금 ​​.bmp 파일 형식에 대해 더 자세히 배우기 시작했고 작은 C++ programm를 작성했습니다.BITMAPFILEHEADER의 문제점

FILE* imageFile; 
fopen_s (&imageFile, this->GetImagePath(), "rb"); 

fread (&this->bmfh, sizeof(BITMAPFILEHEADER), 1, imageFile);  
std::cout << bmfh.bfSize << " " << bmfh.bfOffBits << " " << std::endl; 

비트 맵 파일의 크기를 반환해야 MSDNbmfh.bfSize에 따르면 여기

내 코드의 발췌 한 것입니다.

내 경우에는 bmfh.bfOffBits (54)가 bmfh.bfSize (14)보다 높습니까? 그 이유는 무엇일까요? 내 생각은 이런 식으로 이미지 데이터를위한 메모리를 할당했기 때문에 :

this->size = bmfh.bfSize - bmfh.bfOffBits; 
pixelData = new BYTE[this->size]; 
+0

'bmfh'란 무엇입니까? –

+0

bmfh는 클래스 변수입니다. BITMAPFILEHEADER bmfh; –

+0

당신은 적절한 BMP를 읽고 있습니까? (bfType은 19778이어야합니다.) – nothrow

답변

1

bmfh.bfOffBits은 (54 참조) - BMP 파일의 실제 RGB 데이터 파일의 처음부터 크기입니다. 이것은 보통 54와 같습니다.

즉, 오프셋 0부터 (파일 시작부터) 오프셋 53까지는 bmp 파일의 헤더입니다. 오프셋 54부터는 이미지 파일의 실제 RGB 픽셀 데이터입니다.

bmfh.bfSize (14) - 이미지의 실제 크기입니다.

나는이 문제에 대한 인터넷 검색을 시도하고 이것이 내가 찾은 최고의 소스입니다.

http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html

+0

연구 해 주셔서 감사합니다. 하지만 bmfh.bfSize가 bmfh.bfOffBits보다 작을 수 있습니까? 링크에 따르면 bmfh.bfSize에는 파일 크기가 바이트 단위로 들어 있습니다. 및 bmfh.bfOffBits Microsoft 설명서에 따라 바이트 단위로 오프셋을 지정합니다. –

+0

내 문제가 해결되었습니다. bfSize는 파일 자체가 아닌 구조체의 크기입니다. / –