반응형
HBITMAP hbitmap; BITMAP bitmap; BITMAPINFO bmi; HDC hdcScreen = ::GetDC(NULL); HDC hdcMem = CreateCompatibleDC(hdcScreen); CURSORINFO cursorInfo = { 0 }; cursorInfo.cbSize = sizeof(cursorInfo); GetCursorInfo(&cursorInfo); ICONINFO ii = {0}; GetIconInfo(cursorInfo.hCursor, &ii); CBitmap* pBitmap = CBitmap::FromHandle(ii.hbmMask); BITMAP Bitmap; pBitmap->GetBitmap(&Bitmap); int len = Bitmap.bmHeight * Bitmap.bmWidth/8; BYTE* buffer = new BYTE[len]; GetBitmapBits(ii.hbmMask, len, buffer); int nWidth=Bitmap.bmWidth; int nHeight=Bitmap.bmHeight; int bufferindx=0; BYTE* MaskBuffer = new BYTE[nWidth* nHeight]; int y,x; for(y=0; y< nHeight; y++) { for(x=0; x< nWidth; x+=8) { for(int i=0; i<8;i++) { int nval = buffer[bufferindx] & (0x80 >> i); if(nval == 0) { MaskBuffer[y*nWidth + x+i] = 1; } else MaskBuffer[y*nWidth + x+i] = 0; } bufferindx++; } } for( y=0; y< nHeight; y++) { for(x=0; x< nWidth; x++) { cout << (int)MaskBuffer[y*nWidth + x]; } cout << endl; } delete MaskBuffer; delete buffer;
위의 코드는 마우스 커서의 핸들을 가져와서, 비트맵을 얻는 코드입니다.
헌데, 이상하게 ii.hbmMask은 메모리를 가져올 수 있는데, hbmColor는 Null이 나오더군요.
여튼 이 코드는 마우스 커서의 마스크 이미지를 가져오는 소스라고 생각하시면 되겠습니다.
마스크라서, 비트맵을 표현하는 것이 0, 1 이므로, 32*64 마우스 커서 이미지일 경우
32bit * 64 이므로 256바이트가 필요하며, 256바이트로 커서 이미지를 얻어와서
이를 다시 비트단위로 이미지화하는 코드까지 포함된 예제입니다.
반응형
'Programming > MFC-C++' 카테고리의 다른 글
dll 프로젝트에서 콘솔 창 띄우기 (디버깅 용) (0) | 2013.11.26 |
---|---|
다른 창 윈도우 제어, 활성화, 마우스 이벤트 생성 (0) | 2013.11.05 |
[C++] 연산 시간 체크 ( QueryPerformanceCounter ) (0) | 2013.10.15 |
제스처 인식 Open Toolkit (0) | 2013.09.17 |
가버 필터 소스 코드 ( Gabor Feature Extraction, Gabor Filter) (0) | 2013.09.17 |