HGLOBAL hBuf = GlobalAlloc(GHND, 512*512*4 * 4);//RGB_32位的
LPDWORD lpBuf = (LPDWORD)GlobalLock(hBuf );
         LPDWORD pp = lpBuf;
CBitmap* bitmap;
bitmap = new CBitmap ;
CDC *dcMemory;
dcMemory = new CDC;
dcMemory->CreateCompatibleDC(pDC);
bitmap->CreateCompatibleBitmap(dcMemory,512*2,512*2);
                                        ~~~~~~~~~
                                        这里写成pDC,就能正确显示绿色,
                                        用dcMemory,就显示黑白相间的,
                                        颜色不对,这是为什么????
CBitmap* pOldBitmap = dcMemory->SelectObject(bitmap);
for (int k = 0 ; k < 512 * 512 * 4 ; k++)
{
pp[k] = RGB(0,255,0);//底图设为绿色
}//位图矩阵初始化 int result = bitmap->SetBitmapBits( 512*512*4 *4,lpBuf);

pDC->BitBlt(0,0,512*2,512*2,dcMemory,0,0,SRCCOPY); bitmap = dcMemory->SelectObject(pOldBitmap);

解决方案 »

  1.   

    dcMemory = new CDC;
    dcMemory->CreateCompatibleDC(pDC);
    这时候的dcMemory设备上下文里的调色板只有黑白颜色
    所以创建的bitmap->CreateCompatibleBitmap(dcMemory,512*2,512*2);也只有黑白颜色。改为
    bitmap->CreateCompatibleBitmap(pDC,512*2,512*2);
      

  2.   

    nod
    新创建的memdc只有两种颜色,必须创建合法dc的兼容dc。
      

  3.   

    请问要怎么才能创建出合法dc的兼容dc呢,我现在必须用
    bitmap->CreateCompatibleBitmap(dcMemory,512*2,512*2);这种形式,
    因为这样的话,bitmap->SetBitmapBits( 512*512*4 *4,lpBuf);
    占用时间很少,因为我需要在2。5秒内,完成512次循环操作,所以对时间上有要求,如果写成bitmap->CreateCompatibleBitmap(pDC,512*2,512*2);
    时间要求达不到,多谢大家了。
      

  4.   

    我现在写了一个自定义的调色板,并且选入dcMemory,但是结果还是只有黑白两色。