我在网上查了很多资料,都说是通过IPicture接口来实现显示jpg字节流图像(是从考勤机上不停的发过byte* buffer)。具体函数如下:void DisplayPic(byte* imageBuffer, CDC* pDc, int nSrcWidth, int nSrcHeight, int size)
{
IStream * pStream = NULL; 
IPicture * pPicture = NULL; 
HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE, size); 
LPVOID lpBuf = ::GlobalLock(hMem); 
memcpy(lpBuf, (void*)imageBuffer, size);
::GlobalUnlock(hMem); HRESULT hr = ::CreateStreamOnHGlobal(hMem, TRUE, &pStream); 
ASSERT (SUCCEEDED(hr)); 
hr = ::OleLoadPicture(pStream, size, FALSE, IID_IPicture, (LPVOID *)&pPicture ); //得到pPicture接口失败
ASSERT(hr==S_OK); 
pPicture->Render(pDc->m_hDC, 0, 0, nSrcWidth, nSrcHeight, 0, nSrcHeight, nSrcWidth, -nSrcHeight, NULL); 
pPicture->Release();
GlobalFree(hMem);
}
我在MSDN上查了OleLoadPicture上面Res写了
The stream must be in BMP (bitmap), WMF (metafile), or ICO (icon) format. A picture object created using OleLoadPicture always has ownership of its internal resources (fOwn==TRUE is implied).是不是这个函数只能得到bmp、WMF、ICO格式。
但我通过同样的方法为什么能显示jpg文件呢?方法如下:
HRESULT DisplayPic(CString lpImageFile, HWND hWnd, int nScrWidth, int nScrHeight)
{
    HDC hDC_Temp=::GetDC(hWnd);    IPicture *pPic;
    IStream *pStm;    BOOL bResult;    HANDLE hFile=NULL;
    DWORD dwFileSize,dwByteRead;    //打开硬盘中的图形文件
    hFile=CreateFile(lpImageFile,GENERIC_READ,
    FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    if (hFile!=INVALID_HANDLE_VALUE)
    {
        dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数        if (dwFileSize==0xFFFFFFFF)
            return E_FAIL;
    }
    else
    {
        return E_FAIL;
    }    //分配全局存储空间
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
    LPVOID pvData = NULL;    if (hGlobal == NULL)
    {
        AfxMessageBox(_T("图形文件分配出错."));
        return E_FAIL;
    }    if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块
    {
        AfxMessageBox(_T("内存块锁定出问题"));
        return E_FAIL;
    }    ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区    GlobalUnlock(hGlobal);    if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStm) != S_OK)
    {
        AfxMessageBox(_T("流初始化失败"));
        return E_FAIL;
    }    //装入图形文件
    bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);    if(FAILED(bResult))
    {
        AfxMessageBox(_T("图形文件装载出错."));
        return E_FAIL;
    }    OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度
    OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度
    pPic->get_Width(&hmWidth);
    pPic->get_Height(&hmHeight);    //将图形输出到屏幕上
    bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight,
    0,hmHeight,hmWidth,-hmHeight,NULL);    CloseHandle(hFile);//关闭打开的文件
   
    pPic->Release();
    // Free memory.
    GlobalFree(hGlobal);    if (SUCCEEDED(bResult))
    {
        return S_OK;
    }
    else
    {
        AfxMessageBox(_T("图形文件装载出错."));
        return E_FAIL;
    }
}请问怎么把jpg字节流显示出来呢?