利用dib类可以打开bmp图像,那怎么在MFC中怎么打开一幅jpeg图像或者其他类型的图像呢?还有对图像进行处理后(比如二值化后)怎么让原图和处理后的图像一起显示在运行窗口中,而不是将原图覆盖掉呢?          谢谢各位啦!

解决方案 »

  1.   

    CImage,CxImage,OpenCV都可以,或者用一些支持JPEG的库也可以
      

  2.   

    http://download.csdn.net/source/2350936
      

  3.   

    先将其他格式转换成bmp格式,用ImageMagick,opencv都可以
      

  4.   

    [code]
    void CTourView::DisplayImage(HDC hDC, LPCTSTR szImagePath)
    {     HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, 
      
      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //从指定的路径szImagePath中读取文件句柄
    DWORD dwFileSize=GetFileSize(hFile, NULL); //获得图片文件的大小,用来分配全局内存
    HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给图片分配全局内存
    void *pImageMemory=GlobalLock(hImageMemory); //锁定内存
    DWORD dwReadedSize; //保存实际读取的文件大小
    ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //读取图片到全局内存当中
    GlobalUnlock(hImageMemory); //解锁内存
    CloseHandle(hFile); //关闭文件句柄
    IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
    IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象
    CreateStreamOnHGlobal(hImageMemory, false, &pIStream); //用全局内存初使化IStream接口指针
    OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针
    //得到IPicture COM接口对象后,你就可以进行获得图片信息、显示图片等操作
    OLE_XSIZE_HIMETRIC hmWidth;
    OLE_YSIZE_HIMETRIC hmHeight;
    pIPicture->get_Width(&hmWidth); //用接口方法获得图片的宽和高
    pIPicture->get_Height(&hmHeight);
    pIPicture->Render(hDC,0,0,140,180,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上绘出图片
    GlobalFree(hImageMemory); //释放全局内存
    pIStream->Release(); //释放pIStream
    pIPicture->Release(); //释放pIPicture
    }[/code]
      

  5.   


    void CTourView::DisplayImage(HDC hDC, LPCTSTR szImagePath)
    {     HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, 
      
      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //从指定的路径szImagePath中读取文件句柄
    DWORD dwFileSize=GetFileSize(hFile, NULL); //获得图片文件的大小,用来分配全局内存
    HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给图片分配全局内存
    void *pImageMemory=GlobalLock(hImageMemory); //锁定内存
    DWORD dwReadedSize; //保存实际读取的文件大小
    ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //读取图片到全局内存当中
    GlobalUnlock(hImageMemory); //解锁内存
    CloseHandle(hFile); //关闭文件句柄
    IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
    IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象
    CreateStreamOnHGlobal(hImageMemory, false, &pIStream); //用全局内存初使化IStream接口指针
    OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针
    //得到IPicture COM接口对象后,你就可以进行获得图片信息、显示图片等操作
    OLE_XSIZE_HIMETRIC hmWidth;
    OLE_YSIZE_HIMETRIC hmHeight;
    pIPicture->get_Width(&hmWidth); //用接口方法获得图片的宽和高
    pIPicture->get_Height(&hmHeight);
    pIPicture->Render(hDC,0,0,140,180,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上绘出图片
    GlobalFree(hImageMemory); //释放全局内存
    pIStream->Release(); //释放pIStream
    pIPicture->Release(); //释放pIPicture}
    这个是我们老师的一个例子,用来打开指定路径的任意格式图片