如何图片加载失败图标显示PNG图标

PNG图标_模板王图标大全
您现在的位置:&&>>&&>>&
共 51 种图标&&首页
上一页 1&&&
&&转到第页
 |  |  |  |  |     Copyright & 2007- Inc.All rights reserved转载自:.cn/s/blog_huil.html
仅管VC有提供相应的API和类来操作bmp位图、图标和(增强)元文件,但却不支持jpg、gif和png等格式的图片,而这几种格式却是常常要用到的。这里我给大家介绍两种办法来操作这些格式的图片。1.用API OleLoadPicture来加载JPG、GIF格式的图片(注:不支持PNG格式,另外GIF只能加载第一帧,且不支持透明)OleLoadPicture函数实际上创建了一个IPicture类型的COM接口对象,然后我们可以通过这个COM接口来操作图片(实际上你也可以用APIOleCreatePictureIndirect来加载图片,不过相比而言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 dwReadedS //保存实际读取的文件大小&&&&&&&&&& ReadFile(hFile, pImageMemory, dwFileSize,&dwReadedSize, NULL); //读取图片到全局内存当中&&&&&&&&&& GlobalUnlock(hImageMemory); //解锁内存&&&&&&&&&& CloseHandle(hFile); //关闭文件句柄&& &&&&&&&&&&& IStream *pIS//创建一个IStream接口指针,用来保存图片流&&&&&&&&&& IPicture *pIP//创建一个IPicture接口指针,表示图片对象&&&&&&&&&& CreateStreamOnHGlobal(hImageMemory, false,&pIStream) //用全局内存初使化IStream接口指针&&&&&&&&&& OleLoadPicture(pIStream, 0, false, IID_IPicture,(LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针&& &&&&&&&&&&& //得到IPicture COM接口对象后,你就可以进行获得图片信息、显示图片等操作&&&&&&&&&& OLE_XSIZE_HIMETRIC hmW&&&&&&&&&& OLE_YSIZE_HIMETRIC hmH&&&&&&&&&& 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&&&&&&&&&& pIPicture-&Release(); //释放pIPicture&&& }&& &2.利用第三方的开发库来操作图片这 里我向大家推荐一个库CxImage。CxImage里面包含了许多的类,可以用来加载、保存、显示和变换图片,而且支持许多的图片格式,包括BMP、 JPEG、 GIF、PNG、 TIFF、 MNG、 ICO、 PCX、 TGA、 WMF、 WBMP、 JBG、J2K等。另外CxImage也支持Alpha通道,动画帧等许多功能,而且它还是开源免费的。CxImage的当前的版本是v6.00,介绍和下载可以访问:/KB/graphics/cximage.aspx。CxImage的用法十分简单,示例如下(省去出错处理):&& && &&voidDisplayImage(HDC hDC, CString fileName)&&& {&&&&&&&&&& CString fileE //图片的扩展名&&&&&&&&&& int len = fileName.GetLength();&&&&&&&&&& for(int i=len-1; i&=0; i--) //得到图片的扩展名&&&&&&&&&& {&&&&&&&&&&&&&&&&&& if(fileName[ i ] == '.')&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&& fileExt=fileName.Mid(i+1);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&& }&&&&&&&&&& fileExt.MakeLower(); //将扩展名转为小写&&&&&&&&&& if(fileExt != _T(""))&&&&&&&&&& {&&&&&&&&&&&&&&&&&& //创建CxImage对象,其中静态方法CxImage::GetTypeIdFromName用来根据扩展名获得图片格式的ID代表&&&&&&&&&&&&&&&&&& CxImage image(fileName,CxImage::GetTypeIdFromName(fileExt));&&&&&&&&&&&&&&&&&& if(image.IsValid())&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&& image.Draw(hDC);&&&&&&&&&&&&&&&&&&&&&&&&&& image.Destroy();&&&&&&&&&&&&&&&&&& }&&&&&&&&&& }&&& }3 提供一中更简单的方法VC MFC 提供的 API LoadBitmap / LoadImage 类 CBitmap 等都只能操作 BMP位图,图标。对于其他常用的 JPG / JPEG / GIF / PNG 格式,它无能为力。VC 下怎样才能加载各种非 BMP格式的图片呢? 下面介绍一种最简单的办法。用 CImage 类的 Load 函数加载图片,之后用&Detach 取得 HBITMAP句柄。取得图片的HBITMAP 句柄后就可以像操作 BMP 图片一样处理 JPG / JPEG / GIF / PNG格式的图片了。具体代码如下:#include &atlimage.h&CIHRESULT ret = img.Load(filename ); // filename 是要加载的文件名(包含路径)HBITMAP bitmap = img.Detach();//像操作 BMP 图片一样处理图片
阅读(...) 评论()2011年 总版技术专家分年内排行榜第三2010年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第五
2010年7月 VC/MFC大版内专家分月排行榜第三2010年6月 VC/MFC大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。你要看看不能显示的是什么格式的图片了,一般会出现问题的是在IE下不显示.png格式的图片,其它类型的可以显示。这可能是因为装了QuikeTime软件后造成的。1、 使用 开始-&运行,在运行输入框中输入 &regsvr32 c:\windows\system32\pngfilt.dll&(然后点击确定)或者运行regsvr32 c:\windows" class="t_tag"&windows\system32\pngfilt.dll注意,这个pngfilt.dll在有的系统中是在 c:\windows\system中的,要自己查看一下这文件在哪里,根据自己的系统修改一下路径。如果在注册时出现 &已加载 c:\windows\system32\pngfilt.dll,但没有找到DllRegisterSever 输入点。无法注册这个文件&,则表明这个文件可能损坏了,你要去别的机子去Copy一个好的过来。再进行一次注册。这方法我试了,一点用都没有,不只试了一遍,绝对解决不了我的问题。也许针对某些此文件坏掉的人有用。2、有些人是因为自己系统的设置问题,即任意打开一个文件夹,在上方菜单上选择&工具&-&&文件夹选项&-&&文件类型&,选择下方的&还原&按钮。这是WIN2000?我是XP,跟本没有还原这个按钮。假牙~~3、开始 -& 运行,在运行输入框中输入&Regedit&,到这个路径&HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Accepted Documents&,在右边右键&新建&-&&字符串值& 紧接着最大的数字命名,我这里是3,故命名为4,并赋值为&image/png&。加了,还是解决不了,也是假牙。没有找到真正的解决方法,后来某知识贴里提到有个特别的注册表位置[HKEY_CLASSES_ROOT\MIME\Database\Content Type\image/png]有个办法4~~4、 查看 HKEY_CLASSES_ROOT\MIME\Database\Content Type\image/png是否存在或者有权限查看,否则修改权限或者从别人的电脑上导入一个过来。当然一想这个问题,我觉得直接用系统还原,还原到安装iTunes之前的系统不就完了,结果我去安全模式发现这段时间一直没做系统还原备份,回到Regedit,发现MIME键权限是完全访问的,并没有任何问题。可能是缺少某些键值。晚上让猫科动物把他注册表里MIME这整个一项给我导出来传给我。我把自己的MIME整项删掉,直接导入他的注册表文件。再上网一看,所有PNG图像正常显示,问题解决。原来关键还在于这一步~解决之后现在image/png里的两个重要健值数值名称:Extension数值数据:.png数值名称:Image Filter CLSID数值数据:{A3CCEDF7-2DE2-11D0-86F4-00A0C913F750}最后总结一下:IE6、IE7不能显示PNG图像的解决方法一、打开注册表,依次展开HKEY_CLASSES_ROOT\MIME\Database\Content Type\image/png二、找到Extension键名,将数值数据改为.png三、找到Image Filter CLSID键名,数值数据改为{A3CCEDF7-2DE2-11D0-86F4-00A0C913F750}
阅读(...) 评论() &}

我要回帖

更多关于 加载图标gif 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信