这个函数都做了什么?
HBITMAP MakeImage(HBITMAP hBitmap)
{
HBITMAP hNewBmp;
if (hBitmap)
{
HDC hBufferDC = CreateCompatibleDC(NULL);
HGDIOBJ hPrevBufObject = SelectObject(hBufferDC, hBitmap);
HDC hDirectDC = CreateCompatibleDC(NULL); // DC for working
if (hDirectDC)
{
BITMAP bm;
GetObject(hBitmap, sizeof(bm), &bm);
BITMAPINFO bmInfo;
ZeroMemory(&bmInfo,sizeof(bmInfo));
bmInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth = bm.bmWidth;
bmInfo.bmiHeader.biHeight = bm.bmHeight;
bmInfo.bmiHeader.biPlanes = 1;
bmInfo.bmiHeader.biBitCount = 32;
UINT* ptPixels;
HBITMAP hDirectBitmap = CreateDIBSection(hDirectDC,
(BITMAPINFO*)&bmInfo,
DIB_RGB_COLORS,(void**)&ptPixels, NULL, 0);
if (hDirectBitmap)
{
// 将hDirectBitmap放入hDirectDC中处理
HGDIOBJ hPrevBufDirObject = SelectObject(hDirectDC, hDirectBitmap);
// 当前将原hBitmap即屏幕的所有像素写入到hDirectDC
BitBlt(hDirectDC,0,0,bm.bmWidth,bm.bmHeight,hBufferDC,0,0,SRCCOPY);
int nSize = bm.bmWidth * bm.bmHeight;
for (int i=0; i<nSize; i++)
{
int iSrcR = (ptPixels[i]) & 0x00ff0000 >>16;
int iSrcG = (ptPixels[i]) & 0x0000ff00 >> 8;
int iSrcB = (ptPixels[i]) & 0x000000ff;
ptPixels[i] = RGB(iSrcR,iSrcG,iSrcB);
}
SelectObject(hDirectDC,hPrevBufDirObject);
hNewBmp = hDirectBitmap;
}
DeleteDC(hDirectDC);
}
SelectObject(hBufferDC, hPrevBufObject);
DeleteDC(hBufferDC);
}
return hNewBmp;
}
我感觉这个函数应该什么也没有改变啊!为什么会返回一个灰度化的一个位图呢?