CreateDIBSection 사용방법
/*
CreateDIBSection
(DIB섹션 만드는 함수)
내 용 : 사용방법
사용목적 : 비트맵을 점단위로 빨리 조작하기위해
사용방법 : 1. DIB섹션을 만든다.
2. 메모리DC를 만들어 HBITMAP을 Select한다.
3. m_pDib를 이용해 점이나 그림을 그린다.
4. 메모리DC를 화면에 출력한다.
설 명
-----
DIB섹션을 만듦니다.
hDC를 픽셀단위로 제어할 수 있습니다.
24비트 전체화면(1024x768)은 약 2.3M byte 정도 소요됩니다.
32비트 전체화면(1024x768)은 약 3M byte 정도 소요됩니다.(32비트로 만들면, 성능이 향상됩니다.)
입력 : hDC,width,height,biBitCount
출력 : HBITMAP 리턴값 =DIB 비트맵
BYTE **pBits =DIB 비트맵 데이터 포인터
주의사항 : 사용후 DeleteObject(pBitmap);해주어야합니다.
리턴값 COLORREF는 BGR 순서임
*/
//DIB섹션은 B-G-R순이다.
//BITMAP(DDB)와 비교하여,DIB섹션의 장점은 화면이 커질 수록 메모리 복사가 적게 수행된다는 점이다.
//BITMAP(DDB)는 1픽셀의 정보를 읽거나,쓰기위해 화면 전체를 복사해야 한다.
//화면 크기가 작다면 DDB가 더 효율적일 수 있다.
//DIB의 구조 : BITMAPINFO+pal+image[]
//BITMAPINFO는 GetDIBits()로 얻을 수 있다.
//biBitCount=1,4,16,24,32
HBITMAP CreateDIBSection(HDC hDC,int width,int height,WORD biBitCount,BYTE **pDib,BITMAPINFO *pBI)
{
BITMAPINFO bi;
if(pBI==0)pBI=&bi;
pBI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
pBI->bmiHeader.biWidth=width;
pBI->bmiHeader.biHeight=-height;
pBI->bmiHeader.biPlanes=1;
pBI->bmiHeader.biBitCount=biBitCount;
pBI->bmiHeader.biCompression=BI_RGB;
pBI->bmiHeader.biSizeImage=0;//height * (DWORD)((width*biBitCount/8+3)&~3);
pBI->bmiHeader.biXPelsPerMeter=0;
pBI->bmiHeader.biYPelsPerMeter=0;
pBI->bmiHeader.biClrUsed=0;
pBI->bmiHeader.biClrImportant=0;
return(CreateDIBSection(hDC,(BITMAPINFO *)pBI,DIB_RGB_COLORS,(VOID **)pDib,NULL,0));
}