在下面的程序中,我想通过SetDIBitsToDevice把256灰度图像数组Image显示出来。
可是结果显示的总是一个带颜色的失真图像。请高手指点错在什么地方?
我一直以为可能是“bmi”设置的问题,但不知道怎么解决。
int iWidth, iHeight, iBytesWidth;
iWidth = 500;
iHeight = 500;
iBytesWidth = (iWidth % 4) ? (iWidth / 4 + 1) * 4 : iWidth;
HANDLE hMem = GlobalAlloc(GMEM_MOVEABLE, iBytesWidth * iHeight );
BYTE *Image = (BYTE*)GlobalLock(hMem);//new BYTE[iBytesWidth * iHeight ];
//memset(Image, 100, iBytesWidth * iHeight );
BITMAPINFO bmi;
ZeroMemory(&bmi, sizeof(BITMAPINFO));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = iWidth;
bmi.bmiHeader.biHeight = iHeight;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 8;
bmi.bmiHeader.biCompression = BI_RGB;
::SetDIBitsToDevice(pDC-> GetSafeHdc(), 0, 0, iWidth, iHeight, 0, 0, 0, iHeight, Image, &bmi, DIB_RGB_COLORS);
GlobalUnlock(hMem);
GlobalFree(hMem);
delete []Image;SPI_GETWHEELSCROLLLINES
------解决方案--------------------------------------------------------
256就那样子,图像很难看。