2010-12-15 4 views
2

이 내 현재 코드이지만 BITMAPINFOHEADER에 캐스팅 오류가 발생합니다BITMAPV5HEADER 헤더를 사용하여 비트 맵을 만드는 방법은 무엇입니까?

/* Create the bitmap */ 
BITMAPINFO bmpinfo; 
ZeroMemory(&bmpinfo, sizeof(bmpinfo)); 
BITMAPV5HEADER bmpheader; 
ZeroMemory(&bmpheader, sizeof(bmpheader)); 
bmpheader.bV5Size = sizeof(BITMAPV5HEADER); 
bmpheader.bV5Width = width; 
bmpheader.bV5Height = height; 
bmpheader.bV5Planes = 1; 
bmpheader.bV5BitCount = 32; 
bmpheader.bV5Compression = BI_BITFIELDS; 
bmpheader.bV5SizeImage = width*height*4; 
bmpheader.bV5RedMask = 0x00FF0000; 
bmpheader.bV5GreenMask = 0x0000FF00; 
bmpheader.bV5BlueMask = 0x000000FF; 
bmpheader.bV5AlphaMask = 0xFF000000; 
bmpheader.bV5CSType = 0x57696e20; // LCS_WINDOWS_COLOR_SPACE 
bmpheader.bV5Intent = LCS_GM_BUSINESS; 
bmpinfo.bmiHeader = reinterpret_cast<BITMAPINFOHEADER>(bmpheader); 
void* converted = NULL; 
HDC screen = GetDC(NULL); 
HBITMAP result = CreateDIBSection(screen, &bmpinfo, DIB_RGB_COLORS, &converted, NULL, 0); 
ReleaseDC(NULL, screen); 
// Image data filled here 

가 어떻게 성공적으로이 작업을 수행 할 수 있습니까?

답변

2

BITMAPINFO은 실제 구조가 아니므로 색상 표가 헤더 다음에 나오는 방식에 대한 문서 일뿐입니다. 그냥 CreateDIBSection에 직접 BITMAPV5HEADER을 통과 :

HBITMAP result = CreateDIBSection(screen, reinterpret_cast<BITMAPINFO *>(&bmpheader), DIB_RGB_COLORS, &converted, NULL, 0); 
+0

감사합니다, 작업 –

+0

@ 마크 랜섬을했다 : 나는 그것이 의해 구조의 종류를 추론 할 수 있다고 가정,'발견 BITMAPV5HEADER' 그냥 CreateDIBSection''에 전달 생각 'bV5Size'를 보았지만, 그것에 대한 문서를 찾을 수 없었습니다. 링크가 있습니까? – phimuemue

관련 문제