1。jpeg在数据库中是否以二进制方式存储?
2。若是以二进制方式存储,读出时怎样在视图上显示?
   我知道一种读数据库中位图的方法,读出来后显示是用CreateDIBitmap函数得到HBITMAP.但是显示jpeg又怎样做呢??   还望哪位大虾指点,不甚感激!!

解决方案 »

  1.   

    1.是
    2。void CShowJpgView::OnDraw(CDC* pDC)
    {
    CShowJpgDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if(m_ok==false)
    {
    IStream *pStm; 
    CFileStatus fstatus; 
    CFile file; 
    LONG cb; 
    if (file.Open("test.jpg",CFile::modeRead)&&file.GetStatus("test.jpg",fstatus)&& 
    ((cb = fstatus.m_size) != -1)) 

    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); 
    LPVOID pvData = NULL; 
    if (hGlobal != NULL) 

    if ((pvData = GlobalLock(hGlobal)) != NULL) 

    file.ReadHuge(pvData, cb); 
    GlobalUnlock(hGlobal); 
    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);  if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) 

    OLE_XSIZE_HIMETRIC hmWidth; 
    OLE_YSIZE_HIMETRIC hmHeight;  pPic->get_Width(&hmWidth); 
    pPic->get_Height(&hmHeight); // double fX,fY; 
    // fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0); 
    // fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0); 
    // if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
    double fX,fY; 
    fX = 640;
    fY = 480;
    if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) 
    AfxMessageBox("Failed To Render The picture!"); 
    // pPic->Release(); 
    m_ok=true;

    else 
    AfxMessageBox("Error Loading Picture From Stream!"); 



    else 
    AfxMessageBox("Can't Open Image File!"); 
    }
    else
    {
    OLE_XSIZE_HIMETRIC hmWidth; 
    OLE_YSIZE_HIMETRIC hmHeight; 
    pPic->get_Width(&hmWidth); 
    pPic->get_Height(&hmHeight); 
    double fX,fY; 
    fX = 640;
    fY = 480;
    pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL);
    }
    // TODO: add draw code for native data here
    }