BITMAPINFO bmi   ;   
    DWORD  dwInfoSize   ;   
    dwInfoSize   =   sizeof   (BITMAPINFOHEADER)   ;
    ZeroMemory   (&bmi,   dwInfoSize)   ;       CRect rect;
    GetClientRect(&rect);
    bmi.bmiHeader.biSize                     =   sizeof   (BITMAPINFOHEADER)   ;   
    bmi.bmiHeader.biWidth                   =   rect.Width()   ;   
    bmi.bmiHeader.biHeight                 =   rect.Height()   ;   
    bmi.bmiHeader.biPlanes                 =   1   ;   
    bmi.bmiHeader.biBitCount             =   32;   
    bmi.bmiHeader.biCompression       =   BI_RGB   ;   
    bmi.bmiHeader.biSizeImage           =   0   ;   
    bmi.bmiHeader.biXPelsPerMeter   =   0   ;   
    bmi.bmiHeader.biYPelsPerMeter   =   0   ;   
    bmi.bmiHeader.biClrUsed               =   0   ;   
    bmi.bmiHeader.biClrImportant     =   0   ;    HBITMAP  hBitmap   =   CreateDIBSection   (NULL,   &bmi,   DIB_RGB_COLORS,   (void**)_colors,   NULL,   0);           HDC hdc = GetDC()->GetSafeHdc();    SetDIBits(hdc,hBitmap,0,rect.Width()*rect.Height(),_colors,&bmi,DIB_RGB_COLORS);
但是颜色就是出不来,麻烦各位指点下哪里出错了,万分感谢!

解决方案 »

  1.   

    补充:COLORREF _colors[768][1024]里面存放的是各个像素点的RGB值
      

  2.   

    这样吗?
    HDC hdc = GetDC()->GetSafeHdc();
    CDC *cDC = GetDC();
    CBitmap bufferPic;
    bufferPic.CreateCompatibleBitmap ( cDC, rect.Width(), rect.Height());
    //cDC->SelectObject(&bufferPic);
    SetDIBits(hdc,bufferPic,0,0,_colors,&bmi,DIB_RGB_COLORS);也不行
      

  3.   

    HBITMAP  hBitmap   =   CreateDIBSection   (NULL,   &bmi,   DIB_RGB_COLORS,   (void**)_colors,   NULL,   0); 这个地方,使用CreateCompatibleBitmap
      

  4.   

    谢谢 但是好像有些不同 
    就是我colors都是自己写进去的RGB值 是二维的 这个倒是可以转换为一维
    但是测试了下貌似还是出不来 晕了
      

  5.   

    SetPixelV是被我放弃掉的 效率太慢了 而且做成用户控件更惨不忍睹了
      

  6.   

    biSizeImage = 宽度 * 高度 * 位。你没有设置,创建的应该是有问题的。
      

  7.   

    我后来看了您的例子 加上去了
    bmi.bmiHeader.biSizeImage = iWidth*iHeight *4  ;   
    但是还是一样的
      

  8.   

     bmi.bmiHeader.biHeight   =   -rect.Height()   ;  ????
      

  9.   


    int iWidth = rect.Width(), iHeight = rect.Height();
    bmi.bmiHeader.biSize                     =   sizeof   (BITMAPINFOHEADER)   ;   
    bmi.bmiHeader.biWidth                   =  iWidth;   
    bmi.bmiHeader.biHeight                 =   -iHeight ;   
    bmi.bmiHeader.biPlanes                 =   1   ;   
    bmi.bmiHeader.biBitCount             =   32;   
    bmi.bmiHeader.biCompression       =   BI_RGB   ;   
    bmi.bmiHeader.biSizeImage           =   iWidth*iHeight *4  ;   
    //bmi.bmiHeader.biXPelsPerMeter   =   0   ;   
    //bmi.bmiHeader.biYPelsPerMeter   =   0   ;   
    bmi.bmiHeader.biClrUsed               =   0   ;   
    bmi.bmiHeader.biClrImportant     =   0   ;按照你那个例子该过了 是不是二维数组的问题?
      

  10.   

    不知道啊,你用我的例子,简单写个demo试试。估计你的某些参数的问题。
      

  11.   

    用 SetDIBitsToDeviceBITMAPINFO bmi   ;   
        DWORD  dwInfoSize   ;   
        dwInfoSize   =   sizeof   (BITMAPINFOHEADER)   ;
        ZeroMemory   (&bmi,   dwInfoSize)   ;       CRect rect;
        GetClientRect(&rect);
        bmi.bmiHeader.biSize                     =   sizeof   (BITMAPINFOHEADER)   ;   
        bmi.bmiHeader.biWidth                   =   rect.Width()   ;   
        bmi.bmiHeader.biHeight                 =   rect.Height()   ;   
        bmi.bmiHeader.biPlanes                 =   1   ;   
        bmi.bmiHeader.biBitCount             =   32;   
        bmi.bmiHeader.biCompression       =   BI_RGB   ;   
        bmi.bmiHeader.biSizeImage           =   0   ;   
        bmi.bmiHeader.biXPelsPerMeter   =   0   ;   
        bmi.bmiHeader.biYPelsPerMeter   =   0   ;   
        bmi.bmiHeader.biClrUsed               =   0   ;   
        bmi.bmiHeader.biClrImportant     =   0   ;    HDC hdc = GetDC()->GetSafeHdc();    ::SetDIBitsToDevice(hdc, 0, 0, rect.Width(), rect.Height(), 0, 0, 0, rect.Height(), _colors, &bmi, DIB_RGB_COLORS);
      

  12.   

    建议楼主google一下DrawDibDraw,是我目前所知速度最快的。
      

  13.   


    COLORREF *colors = new COLORREF[iWidth * iHeight];
    for(int i=0; i<iWidth*iHeight; i++)
    colors[i] = 255;
    HDC hDC = GetDC()->GetSafeHdc();
    HBITMAP  hBitmap   =   CreateDIBSection   (hDC,   &bmi,   DIB_RGB_COLORS,   (void**)&colors,   NULL,   0);   
    //HBITMAP hGray = ::CreateCompatibleBitmap(hDC, iWidth, iHeight);   
    //SetDIBits(hDC,hBitmap,0,iHeight,colors,&bmi,DIB_RGB_COLORS);
    ::SetDIBitsToDevice(hDC, 0, 0, rect.Width(), rect.Height(), 0, 0, 0, rect.Height(), (void*)colors, &bmi, DIB_RGB_COLORS);我这样试了下 但是颜色是黑的 不管怎么改都是黑
      

  14.   

    其实我在怀疑COLORREF 数组能否用来当CreateDIBSection 的第四个参数,有高手解答下吗?