位图应该是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
大小没错,为什么位数出错了?究竟哪里有问题呢?