开辟内存位图有一定的限制,太大了就不行。
以下是我开辟内存位图的操作,但是大小还不够,我想开2500*3000的,请大侠指点。int      nMemX;
int      nMemY;
CDC* pDC;
pDC=GetDC();

nMemX=pDC->GetDeviceCaps(HORZRES);
nMemY=pDC->GetDeviceCaps(VERTRES);
if((nMemX<1024)||(nMemY<768))
{
AfxMessageBox("分辨率不能小于1024*768!",MB_OK|MB_ICONEXCLAMATION);
return -1;
}
m_memDC.CreateCompatibleDC(pDC);
m_memBitmap.CreateCompatibleBitmap(pDC,nMemX+10,nMemY+20);
m_memDC.SelectObject(&m_memBitmap);
ReleaseDC(pDC);

解决方案 »

  1.   

    可以考虑内存映象文件,将一部分内存和硬盘文件关联起来,这样理论上可以获得的内存很大(可是速度。)
    struct memMap 
    {
       LPVOID lpDataHead ;
       HFILE  fileHandle ;
       HANDLE memMapHandle ;
       CString filePathName;
       int maxBufSize ;
    } ;
    struct memMap memBuf;
    void CReadDataDoc::AllocMemBuffer()
    {
         OFSTRUCT of ;
         // create a common disk file 
     memBuf.fileHandle = OpenFile(memBuf.filePathName ,
                              &of,
      OF_CREATE | OF_READWRITE | OF_SHARE_DENY_WRITE) ;
     // check whether the file is valible 
     if(memBuf.fileHandle == (HFILE)-1) 
     {
        CString MsgBuf ;
    MsgBuf.Format("Create memory mapping failed !") ;
    MessageBox(AfxGetMainWnd()->m_hWnd,
           MsgBuf,
       "Memory Map Failed",
       MB_OK) ;
            AfxGetMainWnd()->CloseWindow () ;
     }  // create memory map related to disk file 
     memBuf.memMapHandle = CreateFileMapping(
                          (HANDLE)memBuf.fileHandle,
      NULL,
      PAGE_READWRITE,
      0,memBuf.maxBufSize,
      "CG_MEMBUF") ;  // create the view object to return a file pointer 
     memBuf.lpDataHead = MapViewOfFile(
                          memBuf.memMapHandle,
      FILE_MAP_READ | FILE_MAP_WRITE,
      0,0,
      memBuf.maxBufSize);
     memset(memBuf.lpDataHead,0,memBuf.maxBufSize) ;
    }void CReadDataDoc::FreeMemBuffer()
    {
        if(memBuf.fileHandle != (HFILE) -1) 
    {
    CloseHandle((HANDLE)memBuf.fileHandle ) ;
    CloseHandle(memBuf.memMapHandle) ;

    }
    memBuf.fileHandle = (HFILE)-1 ;
    }你试一试吧。