VC下加载多种格式图片方法总结

尽管VC有提供相应的API和类来操作bmp位图、图标和(增强)元文件,但却不支持jpg、gif和png等格式的图片,而这几种格式却是常常要用到的。这里我给大家介绍两种办法来操作这些格式的图片。

1.用API OleLoadPicture来加载JPG、GIF格式的图片(注:不支持PNG格式,另外GIF只能加载第一帧,且不支持透明)

OleLoadPicture 函数实际上创建了一个IPicture类型的COM接口对象,然后我们可以通过这个COM接口来操作图片(实际上你也可以用API OleCreatePictureIndirect来加载图片,不过相比而言OleLoadPicture函数简化了基于流的IPicture对象的创 建),下面是示例代码:(注:由于只是用来示例,代码中省去了出错情况的处理)
     
     
    void 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,100,100,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上绘出图片 
     
            GlobalFree(hImageMemory); //释放全局内存 
            pIStream->Release(); //释放pIStream 
        

阅读更多
个人分类: 数字图像处理
想对作者说点什么? 我来说一句

vc读入各种格式图片

2008年09月19日 48KB 下载

MFC加载不同格式图片

2015年10月15日 2.79MB 下载

<em>C%2B%2B</em>图像处理编程

2014年11月13日 0B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭