我现在想把picture控件表面的绘图结果保存下来,以位图的形式,即24比特的RGB格式,但不需要写成位图文件,只要将这个内存像素数据块复制到我的内存块中即可,请问该怎么做?

解决方案 »

  1.   

    CBitmap::GetBitmapBits可以得到象素集.
    CBitmap::GetBitmap可以得到位图信息.
      

  2.   

        就是透明分量,表示图像透明度的,也是一个字节,这样一个像素就要用4个字节来表示,前3个字节是RGB分量,后一个字节是透明度(也叫alpha分量)。谢谢回复。这个分量不是必须的。怎样可以设定绘图的时候,没有这个分量呢?
      

  3.   

    CWnd* pDrawWnd = NULL ;
    CDC * pDrawDC = NULL ;
    CBitmap bmp1, bmp2;
    CDC dcMemory ;
    BYTE* bmpBuffer = NULL ;BITMAP bm;bkColor = GetSysColor(COLOR_BTNFACE) ;
    BYTE rColor = GetRValue(bkColor) ;
    BYTE gColor = GetGValue(bkColor) ;
    BYTE bColor = GetBValue(bkColor) ;
    if(! dcMemory.CreateCompatibleDC(&dc)) return ;
    if(bmp1.LoadBitmap(IDB_ELEMENT_RECTANGLE))
    {
    BITMAP bm ;
    bmp1.GetBitmap(&bm) ;
    bmpBuffer=(BYTE*)GlobalAlloc(GPTR, bm.bmWidthBytes * bm.bmHeight);
    DWORD dwValue=bmp1.GetBitmapBits(bm.bmWidthBytes * bm.bmHeight, Buffer);
    int size = bm.bmWidthBytes * bm.bmHeight ;
    TRACE("BITMAP1's size = %d\n", size) ;
    for(int i=0; i<size; i+=4)
    {
    if(bmpBuffer[i]   != 0) bmpBuffer[i]   = bColor ;
    if(bmpBuffer[i+1] != 0) bmpBuffer[i+1] = gColor ;
    if(bmpBuffer[i+2] != 0) bmpBuffer[i+2] = rColor ;
    }
    ...
    GlobalFree((HGLOBAL)bmpBuffer);//Free memory
    bmpBuffer = NULL ;
    }