CFile f;
CFileDialog fd(TRUE);
fd.DoModal();
CString fname,fpath;
fname=fd.GetFileName();
fpath=fd.GetPathName();
TRACE(fpath);
BeginWaitCursor(); 
if(!f.Open(fpath,CFile::modeRead))
{
AfxMessageBox("file open error");
} BITMAPFILEHEADER bmfHdr; // Î»Í¼ÎļþÍ·½á¹¹
//LPBITMAPINFOHEADER lpBi;//Ö¸ÏòλͼͷÐÅÏ¢½á¹¹µÄÖ¸Õ룻
DWORD fsize=f.GetLength();
f.Read((LPSTR)&bmfHdr, sizeof(bmfHdr));
//µÃµ½Ð·ÖÅäÄÚ´æµÄÃû±ú
//½«hDig¾ä±úת»»³ÉÊý¾ÝÖ¸Õë
//зÖÅäÒ»¸öÄÚ´æ²¢µ½Ð·ÖÅäÄÚ´æµÄÃû±ú
HANDLE hDIB =GlobalAlloc(GMEM_MOVEABLE,fsize-sizeof(bmfHdr));
//TRACE("\d\d\dhello");
//´ËʱpDIBÊý¾Ý¿éÖжÁÈ¡µÄÊý¾Ý°üÀ¨Î»Í¼Í·ÐÅÏ¢¡¢Î»Í¼ÑÕÉ«±í¡¢Í¼ÏñÏñËصĻҶÈÖµ£»
LPSTR pDIB;
//µÃµ½Ð·ÖÅäÄÚ´æµÄÖ¸Õë
pDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB); 
if (f.ReadHuge(pDIB, fsize - sizeof(BITMAPFILEHEADER)) != fsize- sizeof(BITMAPFILEHEADER) ) 

TRACE("read pDIB err"); 
//break; 
}
BITMAPINFOHEADER *bmhdr;
bmhdr=(BITMAPINFOHEADER*)pDIB;
//µÃµ½ÎļþÍ·µÄ´óС
TRACE("hello %d /n",bmhdr->biSize);
TRACE("  width %d",bmhdr->biWidth);
TRACE("  width %d",bmhdr->biHeight);
TRACE("  Bicount %d",bmhdr->biBitCount);


// LOGPALETTE *pPal;//¶¨ÒåÂß¼­µ÷É«°åÖ¸Õ룻 
// pPal=new LOGPALETTE;//³õʼ»¯¸ÃÖ¸Õ룻
// CPalette *m_palDIB=new CPalette; //¶¨ÒåÒ»¸öµ÷É«°å
//³õʼ»¯µ÷É«°å½á¹¹
//
//pPal->palPalentry[i].
CClientDC dc(this);
HWND hwd=GetSafeHwnd();
HDC hdc;
hdc=::GetDC(hwd);
//dc.BitBlt(hdc,0,0,100,100,) 
//»ñÈ¡±£´æͼÏñÏñËØÖµµÄ»º³åÇøµÄÖ¸Õ룻
LPSTR lpDIBBits;//Ö¸ÏòλͼÏñËصÄÖ¸Õ룻
DWORD s=sizeof(BITMAPINFOHEADER);
lpDIBBits=pDIB+sizeof(BITMAPINFOHEADER);//+sizeof(RGBQUAD); StretchDIBits(hdc,0,0,100,100,0,0,100,100,lpDIBBits,(LPBITMAPINFO)pDIB,DIB_RGB_COLORS,0);

解决方案 »

  1.   

    对不起太乱,不能显示注解,重粘一下 //
    CFile f;
    CFileDialog fd(TRUE);
    fd.DoModal();
    CString fname,fpath;
    fname=fd.GetFileName();
    fpath=fd.GetPathName();
    TRACE(fpath);
    BeginWaitCursor(); 
    if(!f.Open(fpath,CFile::modeRead))
    {
    AfxMessageBox("file open error");
    } BITMAPFILEHEADER bmfHdr; // 
    //LPBITMAPINFOHEADER lpBi;//
    DWORD fsize=f.GetLength();
    f.Read((LPSTR)&bmfHdr, sizeof(bmfHdr));

    HANDLE hDIB =GlobalAlloc(GMEM_MOVEABLE,fsize-sizeof(bmfHdr));
    //TRACE("\d\d\dhello");
    //
    LPSTR pDIB;
    //
    pDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB); 
    if (f.ReadHuge(pDIB, fsize - sizeof(BITMAPFILEHEADER)) != fsize- sizeof(BITMAPFILEHEADER) ) 

    TRACE("read pDIB err"); 
    //break; 
    }
    BITMAPINFOHEADER *bmhdr;
    bmhdr=(BITMAPINFOHEADER*)pDIB;
    //
    TRACE("hello %d /n",bmhdr->biSize);
    TRACE("  width %d",bmhdr->biWidth);
    TRACE("  width %d",bmhdr->biHeight);
    TRACE("  Bicount %d",bmhdr->biBitCount);


    // LOGPALETTE *pPal;//
    // pPal=new LOGPALETTE;//
    // CPalette *m_palDIB=new CPalette; // //
    //
    //pPal->palPalentry[i].
    CClientDC dc(this);
    HWND hwd=GetSafeHwnd();
    HDC hdc;
    hdc=::GetDC(hwd);
    //dc.BitBlt(hdc,0,0,100,100,) 
    //
    LPSTR lpDIBBits;//
    DWORD s=sizeof(BITMAPINFOHEADER);
    lpDIBBits=pDIB+sizeof(BITMAPINFOHEADER);//+sizeof(RGBQUAD); StretchDIBits(hdc,0,0,100,100,0,0,100,100,lpDIBBits,(LPBITMAPINFO)pDIB,DIB_RGB_COLORS,0);

     
     //最的显示的总是黑框,不知为什么
     
      

  2.   

    对不起太乱,不能显示注解,重粘一下 //
    CFile f;
    CFileDialog fd(TRUE);
    fd.DoModal();
    CString fname,fpath;
    fname=fd.GetFileName();
    fpath=fd.GetPathName();
    TRACE(fpath);
    BeginWaitCursor(); 
    if(!f.Open(fpath,CFile::modeRead))
    {
    AfxMessageBox("file open error");
    } BITMAPFILEHEADER bmfHdr; // 
    //LPBITMAPINFOHEADER lpBi;//
    DWORD fsize=f.GetLength();
    f.Read((LPSTR)&bmfHdr, sizeof(bmfHdr));

    HANDLE hDIB =GlobalAlloc(GMEM_MOVEABLE,fsize-sizeof(bmfHdr));
    //TRACE("\d\d\dhello");
    //
    LPSTR pDIB;
    //
    pDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB); 
    if (f.ReadHuge(pDIB, fsize - sizeof(BITMAPFILEHEADER)) != fsize- sizeof(BITMAPFILEHEADER) ) 

    TRACE("read pDIB err"); 
    //break; 
    }
    BITMAPINFOHEADER *bmhdr;
    bmhdr=(BITMAPINFOHEADER*)pDIB;
    //
    TRACE("hello %d /n",bmhdr->biSize);
    TRACE("  width %d",bmhdr->biWidth);
    TRACE("  width %d",bmhdr->biHeight);
    TRACE("  Bicount %d",bmhdr->biBitCount);


    // LOGPALETTE *pPal;//
    // pPal=new LOGPALETTE;//
    // CPalette *m_palDIB=new CPalette; // //
    //
    //pPal->palPalentry[i].
    CClientDC dc(this);
    HWND hwd=GetSafeHwnd();
    HDC hdc;
    hdc=::GetDC(hwd);
    //dc.BitBlt(hdc,0,0,100,100,) 
    //
    LPSTR lpDIBBits;//
    DWORD s=sizeof(BITMAPINFOHEADER);
    lpDIBBits=pDIB+sizeof(BITMAPINFOHEADER);//+sizeof(RGBQUAD); StretchDIBits(hdc,0,0,100,100,0,0,100,100,lpDIBBits,(LPBITMAPINFO)pDIB,DIB_RGB_COLORS,0);

     
     //最的显示的总是黑框,不知为什么
     
      

  3.   

    StretchDIBits的最后一个参数用SRCCOPY