DIB를 DDB로 변환
출처 네이버 블로그 > 탑건매직
http://blog.naver.com/topgunmagic/120033732401
ReadDIB.zip
* DIB
1. 직접 비트맵을 파싱하여 처리
2. DIB를 DDB 로 변환 (2가지)
[코드]
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
// 1) loadimage를 이용한 변환 (DDB->DIB) ----1
hbit = (HBITMAP) LoadImage( NULL, "dragon00.bmp",
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
MemDC=CreateCompatibleDC(hdc);
SelectObject(MemDC,hbit);
BitBlt(hdc,0,0,96,96,MemDC,0,0,SRCCOPY);
// DDB로 변환하여 그리기 ---------------------2
/* hbit=CreateDIBitmap(hdc,(BITMAPINFOHEADER *)ih,
CBM_INIT, (PBYTE)fh+fh->bfOffBits,
(BITMAPINFO)ih,DIB_RGB_COLORS);
MemDC=CreateCompatibleDC(hdc);
SelectObject(MemDC,hbit);
BitBlt(hdc,0,0,ih->biWidth,ih->biHeight,MemDC,0,0,SRCCOPY);
*/
// DIB로 그리기 -----------------------------3
if (fh) {
SetDIBitsToDevice(hdc,0,0,bx,by,0,0,0,by,pRaster,(BITMAPINFO *)ih,DIB_RGB_COLORS);
//StretchDIBits(hdc,0,0,bx*2,by*2,0,0,bx,by,pRaster,(BITMAPINFO *)ih,DIB_RGB_COLORS,SRCCOPY);
}
EndPaint(hWnd, &ps);
return 0;
// 비트맵 파싱
BITMAPFILEHEADER *fh=NULL;
BITMAPINFOHEADER *ih;
BITMAPINFO* info;
int bx,by;
BYTE *pRaster;
// DDB 변환용
HBITMAP hbit;
void LoadDIB(char *Path)
{
HANDLE hFile;
DWORD FileSize, dwRead;
hFile=CreateFile(Path,GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE) {
return;
}
FileSize=GetFileSize(hFile,NULL);
if (fh)
free(fh);
// 헤더 정보 읽기
fh=(BITMAPFILEHEADER *)malloc(FileSize);
ReadFile(hFile,fh,FileSize,&dwRead,NULL);
CloseHandle(hFile);
// 데이타의 위치
pRaster=(PBYTE)fh+fh->bfOffBits;
// 비트맵 info header
ih=(BITMAPINFOHEADER *)((PBYTE)fh+sizeof(BITMAPFILEHEADER));
// info
/*info->bmiHeader = ih;
info->bmiColors = (RGBQUAD)((PBYTE)fh+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER));*/
bx=ih->biWidth;
by=ih->biHeight;
}