COLORREF _colors[768][1024]里面存放的是各个像素点的RGB值,代码如下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.   

    CreateDibSection已经设置了颜色了,不用setdibits..............
    HDC hdc = GetDC()->GetSafeHdc();
    HBITMAP  hBitmap   =   CreateDIBSection   (hdc,   &bmi,   DIB_RGB_COLORS,   (void**)_colors,   NULL,   0);   
      

  2.   

    还是一样的 ,我的颜色是自己一个点一个点算出来的RGB值,但是CreateDIBSection 第四个参数貌似是一维数组,这个有没有关系的?
      

  3.   

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

  4.   


    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   ;    HDC hdc = GetDC()->GetSafeHdc();    ::SetDIBitsToDevice(hdc, 0, 0, rect.Width(), rect.Height(), 0, 0, 0, rect.Height(), _colors, &bmi, DIB_RGB_COLORS);
      

  5.   

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

  6.   

    biSizeImage 是不等于= 宽度 * 高度 * 位 的 
    请参见 
    http://topic.csdn.net/u/20100126/10/960b8104-30d4-471d-89b2-12762f35956d.html通过bit写也是一种锻炼嘛,当做实验挺好的 
      

  7.   

    CreateDIBSection  的第四个参数记录了新创建的DIBSECITON的内存新地址,你不可以把一个已经分配好的内存地址给他。如果你已经有了图像数据数组,要显示它需要构造一个BMP信息头,然后调用SetDIBits 或者SetDIBitsToDevice  来显示它。另外一种比较合理的方式是:先用CreateDIBSection  创建好指定大小的DIBSECITON,然后修改这个DIBSECITON里的数据。要显示它的时候直接用bitblt函数。
      

  8.   

    两个原因:
    1、colorref要一维数组才行;
    2、HBITMAP hGray = ::CreateCompatibleBitmap(hDC, iWidth, iHeight);   
    SetDIBitsToDevice(hDC, 0, 0, rect.Width(), rect.Height(), 0, 0, 0, rect.Height(), (void*)colors, &bmi, DIB_RGB_COLORS);
    这样就行了,谢谢大家