现在我有三个BYTE数组,分别表示R,G,B信息,BYTE* ColorR,BYTE* ColorG,BYTE* ColorB
   如何将这三个数组的数据一并在客户区绘制出来呢?使用pDC->SetPixel()太慢了,因为这三个数组的数据就是客户区的绘制数据,一个一个像素点的设置,肯定效率太低。
   望高手出招!

解决方案 »

  1.   

    先创建一个客户缓存区兼容设备,绘制SetPixel绘制,然后保存为一个BIMAP,下次显示的时候,直接贴图就可以了.
      

  2.   

    SetPixel效率确实不行,试过了,我的pDC实际就是内存DC,画完后在BitBlt,太慢了
      

  3.   

    有两个函数能将位图数据填到位图中去,SetDIBits和SetBitmapBits,前者是对于设备无关位图的,后者是对相关位图的。
      

  4.   

    参考bitmap位图显示过程,
    把你的数据封装成位图信息头bitmapinfo和数据,
    然后用dib相关方法显示到一个compatible memdc上面.
      

  5.   

    能给出大概的代码示意图么?SetDIBits和SetBitmapBits两个函数的参数都只有一个数组,而我的数据是三个数组啊
      

  6.   


        CX, CY; // 这个值你必须知道,事先给定
            int sz = CX * CY;
    BYTE *pData = new BYTE[sz*4]; // show in 32 bits

    for(int i=0; i< sz; i++)
    {
    pData[i*4+0] = *ColorB++ ;
    pData[i*4+1] = *ColorG++;
    pData[i*4+2] = *ColorR++;
    pData[i*4+3] = 0;
    }

    CDC *pdc = GetDC(); 
    CDC memdc; 
    CBitmap bmp;
    CRect rt;

    memdc.CreateCompatibleDC(pdc);
    bmp.CreateBitmap(CX, CY , 1, 32,pData);
    CBitmap* pOldBitmap = memdc.SelectObject(&bmp); 

    pdc->BitBlt(0,0, CX, CY, &memdc, 0, 0, SRCCOPY); 

    memdc.SelectObject(pOldBitmap);
    memdc.DeleteDC();
            ReleaseDC(pdc);       
      

  7.   

    看样子楼主的是24位位图,不知道能不能把4*i改成3*i,分配数组大小改成程序cx*cy*3,cx和cy是宽和高。
    然后用SetDIBits直接画上去。
      

  8.   


    因为他的方法虽然简单,但是基于DDB的,也就是说兼容性会有很大的问题(假如你直接使用那代码)..
    good luck.