主题:[讨论]究竟问题在哪里?请教
位图应该是24位的,高*宽=256*256,下面是这个显示位图和显示位图每个像素的位数和位图的高*宽的函数
void DrawBmp2(HWND hWnd, HDC hDC)//在void OnDraw(HWND hWnd)里面会调用这个函数
{
HDC hMemDC;
HBITMAP hBitmap;
BITMAPINFO* pbi;
hDC = GetDC(hWnd);
pbi = (BITMAPINFO*)malloc(sizeof(BITMAPINFO));
// 装载位图Lenna1.bmp
hBitmap = (HBITMAP)LoadImage(0, "E:\\CL\\BMP\\Lenna2.bmp",
IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbi->bmiHeader.biBitCount = 0;
// 创建DC
hMemDC=CreateCompatibleDC(hDC);
// 设置DC
SelectObject(hMemDC, hBitmap);
//获取位图信息
GetDIBits(hMemDC, hBitmap, 0, 0, NULL, pbi, DIB_PAL_COLORS);
// 显示位图Lenna2.bmp
BitBlt(hDC, pbi->bmiHeader.biWidth+10, 0,
pbi->bmiHeader.biWidth, pbi->bmiHeader.biHeight, hMemDC, 0, 0, SRCCOPY);
// 字符串
_snprintf(text, sizeof(text)-1,
"位图2的位数:%d位, 大小:%d*%d",
pbi->bmiHeader.biBitCount,
pbi->bmiHeader.biWidth, pbi->bmiHeader.biHeight);
// 文本输出
TextOut(hDC, 0, 0, text, strlen(text));
// 释放资源
DeleteObject(hBitmap);
ReleaseDC(hWnd, hDC);
DeleteObject(hMemDC);
}
位图正常显示了,输出:位图2的位数:32, 大小:256*256
大小没错,为什么位数出错了?究竟哪里有问题呢?
void DrawBmp2(HWND hWnd, HDC hDC)//在void OnDraw(HWND hWnd)里面会调用这个函数
{
HDC hMemDC;
HBITMAP hBitmap;
BITMAPINFO* pbi;
hDC = GetDC(hWnd);
pbi = (BITMAPINFO*)malloc(sizeof(BITMAPINFO));
// 装载位图Lenna1.bmp
hBitmap = (HBITMAP)LoadImage(0, "E:\\CL\\BMP\\Lenna2.bmp",
IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbi->bmiHeader.biBitCount = 0;
// 创建DC
hMemDC=CreateCompatibleDC(hDC);
// 设置DC
SelectObject(hMemDC, hBitmap);
//获取位图信息
GetDIBits(hMemDC, hBitmap, 0, 0, NULL, pbi, DIB_PAL_COLORS);
// 显示位图Lenna2.bmp
BitBlt(hDC, pbi->bmiHeader.biWidth+10, 0,
pbi->bmiHeader.biWidth, pbi->bmiHeader.biHeight, hMemDC, 0, 0, SRCCOPY);
// 字符串
_snprintf(text, sizeof(text)-1,
"位图2的位数:%d位, 大小:%d*%d",
pbi->bmiHeader.biBitCount,
pbi->bmiHeader.biWidth, pbi->bmiHeader.biHeight);
// 文本输出
TextOut(hDC, 0, 0, text, strlen(text));
// 释放资源
DeleteObject(hBitmap);
ReleaseDC(hWnd, hDC);
DeleteObject(hMemDC);
}
位图正常显示了,输出:位图2的位数:32, 大小:256*256
大小没错,为什么位数出错了?究竟哪里有问题呢?