// m_pRect是显示图片的整个ScrollView的尺寸
// pMemDC是显示图像时用DrawDIBDraw写入数据的
CBitmap backBitmap;
backBitmap.CreateCompatibleBitmap(pDC, m_pRect->Width(), m_pRect->Height()); 
m_pBackDC = new CDC;
m_pBackDC->CreateCompatibleDC(pDC);
m_pBackDC->SelectObject(&backBitmap);
m_pBackDC->BitBlt(0, 0, m_pRect->Width(), m_pRect->Height(), pMemDC, 0, 0, SRCCOPY); 
【1】我的图片大概有50MB,请问这样创建的兼容DC需要多少内存开销?
【2】一些书上说:“兼容DC是与特定显示设备相关的一个显示平面,是GDI内部保存的数据结构。”
是不是这样?能不能给出再具体、详细一些的解释?

解决方案 »

  1.   

    DC是DC 图片是图片
    DC占DC的大小,图片占图片的大小
      

  2.   

    大图片显示,用虚拟内存技术。
    DC是DC 图片是图片
    DC占DC的大小,图片占图片的大小
    正确
      

  3.   

    m_pBackDC->BitBlt(0, 0, m_pRect->Width(), m_pRect->Height(), pMemDC, 0, 0, SRCCOPY); 
    那么上一行语句执行完后,m_pBackDC的内容变成了什么?为这一动作,他究竟花了多少内存,难道仅仅几十个字节么?
      

  4.   

    你用sizeof看看不就知道了int nSize = (int)sizeof(*pDC);
      

  5.   

    GDI 的部分功能是靠设备驱动来实现的,每个设备都在启动时分配一定的heap ,DC关联了图像设备的表面