實現MFC打開JPEG圖像的源代碼

 void CMyBMPView::OnDraw(CDC* pDC)

{
CMyBMPDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
/*
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
// CBitmap Bitmap;
HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, pDoc->m_PicPath,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
CBitmap Bitmap;
Bitmap.Attach(hBitmap);
// Bitmap.LoadBitmap(IDB_MYBITMAP);
CBitmap *pOldBitmap = MemDC.SelectObject(&Bitmap);
BITMAP bm;
Bitmap.GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
*/
::CoInitialize(NULL);  // COM 初始化
    HRESULT hr;
    CFile file;
    
    file.Open( pDoc->m_PicPath, CFile::modeRead | CFile::shareDenyNone );  // 讀入文件內容
    DWORD dwSize = file.GetLength();
    HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
    LPVOID lpBuf = ::GlobalLock( hMem );
    file.ReadHuge( lpBuf, dwSize );
    file.Close();
    ::GlobalUnlock( hMem );
    IStream * pStream = NULL;
    IPicture * pPicture = NULL;
    
    // 由 HGLOBAL 得到 IStream,參數 TRUE 表示釋放 IStream 的同時,釋放內存
    hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
    ASSERT ( SUCCEEDED(hr) );
    
    hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
    ASSERT(hr==S_OK);
    
    long nWidth,nHeight;  // 寬高,MM_HIMETRIC 模式,單位是0.01毫米
    pPicture->get_Width( &nWidth );    // 寬
    pPicture->get_Height( &nHeight );  // 高
    
    ////////原大顯示//////
    CSize sz( nWidth, nHeight );
    pDC->HIMETRICtoDP( &sz );  // 轉換 MM_HIMETRIC 模式單位爲 MM_TEXT 像素單位
    pPicture->Render(pDC->m_hDC,0,0,sz.cx,sz.cy,
        0,nHeight,nWidth,-nHeight,NULL);
        
    ////////按窗口尺寸顯示////////
//    CRect rect;    GetClientRect(&rect);
//    pPicture->Render(pDC->m_hDC,0,0,rect.Width(),rect.Height(),
//        0,nHeight,nWidth,-nHeight,NULL);
    if ( pPicture ) pPicture->Release();// 釋放 IPicture 指針
    if ( pStream ) pStream->Release();  // 釋放 IStream 指針,同時釋放了 hMem
    
    ::CoUninitialize();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章