15,979
社区成员
发帖
与我相关
我的任务
分享
BITMAPINFO *pBminfo = (BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256);
ZeroMemory(pBminfo, sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*256);
pBminfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pBminfo->bmiHeader.biWidth = width;
pBminfo->bmiHeader.biHeight = -(LONG)height;
pBminfo->bmiHeader.biPlanes = 1;
pBminfo->bmiHeader.biBitCount = 8;
pBminfo->bmiHeader.biCompression = BI_RGB;
// Get a DC for the full screen
HDC hdcScreen = GetDC(NULL);
hr = hdcScreen ? S_OK : E_FAIL;
// Release the previously allocated bitmap
if (SUCCEEDED(hr))
{
if (m_hDIBBitmap)
{
DeleteObject(m_hDIBBitmap);
}
UINT colorCount;
hr = pPalette->GetColorCount(&colorCount);
WICColor myColor[256];
UINT actualPaletteSize;
hr = pPalette->GetColors(256, myColor, &actualPaletteSize);
memcpy(&pBminfo->bmiColors, myColor, 256*sizeof(RGBQUAD));
m_hDIBBitmap = CreateDIBSection(hdcScreen, pBminfo, DIB_PAL_COLORS, &pvImageBits,
NULL, 0);
colorCount = SetDIBColorTable(hdcScreen, 0, 256, (RGBQUAD*)myColor);//returns 0, failed
RGBQUAD q[256];
colorCount = GetDIBColorTable(hdcScreen, 0, 256, q);//returns 0 , failed
ReleaseDC(NULL, hdcScreen);
hr = m_hDIBBitmap ? S_OK : E_FAIL;
}
//result:
colorCount == 0 //GetDIBColorTable() failed
m_hDIBBitmap != NULL// "myColor" contains 8 bits gray scale color table, that is it