本帖最后由 u013220848 于 2014-05-08 22:59:41 编辑

解决方案 »

  1.   

    16位24位图不需要使用调色板,所以你不用设置RGBQUAD调色板,你直接构造个BITMAPINFO bmpInfo;就行了。bmi->bmiHeader.biSizeImage这个参数也不能为0,是你实际图像数据的大小。
      

  2.   

    给你个24位图的 CDC *pDC = m_stcMCamera.GetWindowDC();
    CRect rect;
    m_stcMCamera.GetWindowRect(&rect);
    //构造图像头
    BITMAPINFO bmpInfo;
    bmpInfo.bmiHeader.biBitCount = 24;
    bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmpInfo.bmiHeader.biPlanes = 1;
    bmpInfo.bmiHeader.biWidth = iWidth;
    bmpInfo.bmiHeader.biHeight = iHeight;
    bmpInfo.bmiHeader.biSizeImage = bmpInfo.bmiHeader.biWidth*bmpInfo.bmiHeader.biHeight*3;
    bmpInfo.bmiHeader.biCompression = BI_RGB;
    bmpInfo.bmiHeader.biClrUsed = 0;
    bmpInfo.bmiHeader.biXPelsPerMeter = 0;
    bmpInfo.bmiHeader.biYPelsPerMeter = 0;
    bmpInfo.bmiHeader.biClrImportant = 0;
    SetStretchBltMode(pDC->m_hDC,HALFTONE);
    StretchDIBits(pDC->m_hDC, // 设备环境句柄
    0,                 //目标X坐标
    0,                  // 目标Y坐标
    rect.Width(),            // 目标宽度
    rect.Height(),           // 目标高度
    0,                // 源X坐标
    0,                 // 源Y坐标
    iHeight,           // 源宽度
    iHeight,          // 源高度
    pImg, //图像数据指针BYTE*
    &bmpInfo,         // 指向位图信息结构的指针
    DIB_RGB_COLORS,                 // 使用的颜色数目
    SRCCOPY);  ReleaseDC(pDC);
      

  3.   


    上午又研究了一下,原来8位是需要调色板,24位图像不需要调色板,但是16位图像好像是无法直接用16位来显示的?我试过只初始化bmpInfo里面的bmiHeader结构,bitcount设置为16,显示的时候变成彩色的了。
      

  4.   


    上午又研究了一下,原来8位是需要调色板,24位图像不需要调色板,但是16位图像好像是无法直接用16位来显示的?我试过只初始化bmpInfo里面的bmiHeader结构,bitcount设置为16,显示的时候变成彩色的了。
    你确定是16位图,不是16色图?一般bitcount设置1,4(16色图),8,24,32
      

  5.   


    上午又研究了一下,原来8位是需要调色板,24位图像不需要调色板,但是16位图像好像是无法直接用16位来显示的?我试过只初始化bmpInfo里面的bmiHeader结构,bitcount设置为16,显示的时候变成彩色的了。
    你确定是16位图,不是16色图?一般bitcount设置1,4(16色图),8,24,32对,是16位图,不是16色,是实验室科研相机,我也很纳闷为什么科研相机都成这种像?
      

  6.   

    "windows图形编程 袁枫" 第10章 源代码
    case DIB_16RGB555:
    case DIB_16RGB565: