반응형
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 |