查看: 6013|回复: 21

请问加载png格式图片的问题~

[复制链接]

该用户从未签到

发表于 2009-5-5 13:03:45 | 显示全部楼层 |阅读模式
如题,当时我在生成库的时候下载了VS2008SP1的第三方库,通过编译应该是生成了osgdb_pngd.dll和osgdb_png.dll这两个dll文件,但是在程序中加载png图片,会出错提示没有找到libpng13d.dll,晕。。。。这个不是第三方库里面原来就有嘛,那也就是说生成的osgdb_pngd.dll没有用吗?。。。

之后我把第三方库的libpng13d.dll放到bin里面。。仍然会出错。。这是为什么呢?~

png.jpg

该用户从未签到

 楼主| 发表于 2009-5-5 13:08:58 | 显示全部楼层
晕。。。我刚才把libpng13.dll,libpng13d.dll,zlib1.dll,zlib1d.dll都复制到了osgPlugins下面,就能加载png图片了。。。那这样说也就是生成的osgdb_pngd.dll,osgdb_png.dll没有用吗。。麻烦array老师解释一下~~

该用户从未签到

发表于 2009-5-5 13:18:28 | 显示全部楼层
因为您的ligpng生成的是动态链接库,有关PNG数据读写的函数都保存在动态库libpng.dll中,而静态库libpng.lib仅仅保存了它们的声明。因此尽管生成了osgdb_png插件,并在其中指示通过libpng的函数加载数据,但是函数的内容还保存在动态库libpng.dll中,系统必须有这个库才能正常工作。

osgdb_png插件当然起作用了,否则osg的插件机制无法找到PNG文件相关的插件;如果不希望附带libpng.dll这些动态库,那么请在编译libpng的时候选择静态编译。

该用户从未签到

 楼主| 发表于 2009-5-5 19:20:54 | 显示全部楼层
噢噢,终于明白了~刚写array老师耐心的 解答

该用户从未签到

发表于 2012-3-25 18:22:55 | 显示全部楼层
我的问题跟你一样的,但我照你的复制了后,还是不能加载.png图片。请问还需要别的步骤么?谢谢

该用户从未签到

发表于 2012-10-21 21:43:38 | 显示全部楼层
sbayanami 发表于 2009-5-5 13:08
晕。。。我刚才把libpng13.dll,libpng13d.dll,zlib1.dll,zlib1d.dll都复制到了osgPlugins下面,就能加载 ...

你好!你的libpng13.dll 和 libpng13d.dll是 win7 下的吗? 可以发给我吗? 谢谢! tomato_linux@126.com

该用户从未签到

发表于 2012-10-21 21:46:33 | 显示全部楼层
bdaabaa3b2a8 发表于 2012-3-25 18:22
我的问题跟你一样的,但我照你的复制了后,还是不能加载.png图片。请问还需要别的步骤么?谢谢

你好! 我也遇到了这样的问题,现在网上没有找到win7 64位 下适用的libpng13.dll 和 libpng13d.dll ,你的是什么系统下的呢?可以发给我吗? 谢谢! tomato_linux@126.com

该用户从未签到

发表于 2012-10-22 08:16:10 | 显示全部楼层
自己去SourceForge下载源码 编译一下吧 很简单,而且很多都提供CMake脚本了

该用户从未签到

发表于 2012-10-24 09:43:59 | 显示全部楼层
我给你发个osgdb_pngd.dll和osgdb_png.dll插件吧,一个为debug版本的,一个为release版本的
这两个文件在我的计算机上测试是可以正常加载png格式文件的,这两个插件使用的libpng版本为1.5.7版本
你下载之后,对你的系统中的png插件进行替换就行了。

osgdb_png.dll

164 KB, 下载次数: 132, 下载积分: 威望 1

osg的png插件Debug版本

osgdb_pngd.dll

304 KB, 下载次数: 143, 下载积分: 威望 1

osg的png插件Release版本

该用户从未签到

发表于 2012-10-24 09:58:23 | 显示全部楼层
这是我自己用Visual C++ 2005编译成功的两个插件,这两个插件对libpng和zlib的链接都采用的是静态链接,故你在使用的时候不需要额外的libpng.dll和zlib1.dll了。要是插件在你的计算机上面不能正常加载png文件的话,再跟我说一下。

该用户从未签到

发表于 2012-10-25 14:48:39 | 显示全部楼层
the_mercury 发表于 2012-10-24 09:43
我给你发个osgdb_pngd.dll和osgdb_png.dll插件吧,一个为debug版本的,一个为release版本的
这两个文件在我 ...

非常感谢,你的帮助,我下载了试试。

该用户从未签到

发表于 2012-10-25 14:49:16 | 显示全部楼层
the_mercury 发表于 2012-10-24 09:58
这是我自己用Visual C++ 2005编译成功的两个插件,这两个插件对libpng和zlib的链接都采用的是静态链接,故你 ...

嗯,好的,我先试一试。谢谢了

该用户从未签到

发表于 2012-10-25 15:18:31 | 显示全部楼层
the_mercury 发表于 2012-10-24 09:58
这是我自己用Visual C++ 2005编译成功的两个插件,这两个插件对libpng和zlib的链接都采用的是静态链接,故你 ...

我用你提供的两个文件替换了我之前的文件,还是不行啊,现在运行的时候不会出现找不到libpng13d.dll的提示了,但是会报:
Unhanded execption at 0x65722fa1(osg80-osgd.dll),除此之外,还会有警告:Cannot find plugin to read file..., 不知道是什么问题,请帮忙分析下,非常感谢!

该用户从未签到

发表于 2012-10-26 09:19:53 | 显示全部楼层
忘了告诉你一下,那个Debug版本的插件要能够正常运行的话要满足两点:
1、你的计算机上面应该装有Visual Studio 2005,因为Debug版本是调试用的,如果你的计算机上没有Visual Studio 2005,用Visual Studio 2005编译的插件是不能跑的,道理你懂的。
2、你所使用的osg应该为Debug版本的,因为Debug版本缺省加载的是osgdb_pngd.dll,而Release版本的会加载osgdb_png.dll。
否则,你只能在你的计算机上装osg的Release版本的,用我给你发的Release版本的插件了。

该用户从未签到

发表于 2012-10-26 09:32:00 | 显示全部楼层
如果你的计算机上装的是Debug版本的osg,你可以把Release版本的png插件改名(将osgdb_png.dll改名为osgdb_pngd.dll,osg是调用LoadLibrary动态加载插件的,这样改名应该没事的)后放入插件目录下面,试试这样能不能正常加载png文件。

该用户从未签到

发表于 2013-6-4 19:32:28 | 显示全部楼层
为什么有这个函数    osg::ref_ptr<osg::Image> image = osgDB::readImageFile("Images/Grass2.jpg");
都要提示没有插件啊
“noise.exe”: 已加载“C:\Users\lenovo\Documents\Visual Studio 2008\Projects\noise\Debug\noise.exe”,已加载符号。
“noise.exe”: 已加载“C:\Windows\System32\ntdll.dll”
“noise.exe”: 已加载“C:\Windows\System32\kernel32.dll”
“noise.exe”: 已加载“C:\Windows\System32\KernelBase.dll”
“noise.exe”: 已加载“C:\Program Files\OSG30VS2008\bin\osg80-osgd.dll”,已加载符号。
“noise.exe”: 已加载“C:\Program Files\OSG30VS2008\bin\ot12-OpenThreadsd.dll”,已加载符号。
“noise.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll”,已加载符号。
“noise.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcp90d.dll”,已加载符号。
“noise.exe”: 已加载“C:\Windows\System32\opengl32.dll”
“noise.exe”: 已加载“C:\Windows\System32\msvcrt.dll”
“noise.exe”: 已加载“C:\Windows\System32\advapi32.dll”
“noise.exe”: 已加载“C:\Windows\System32\sechost.dll”
“noise.exe”: 已加载“C:\Windows\System32\rpcrt4.dll”
“noise.exe”: 已加载“C:\Windows\System32\gdi32.dll”
“noise.exe”: 已加载“C:\Windows\System32\user32.dll”
“noise.exe”: 已加载“C:\Windows\System32\lpk.dll”
“noise.exe”: 已加载“C:\Windows\System32\usp10.dll”
“noise.exe”: 已加载“C:\Windows\System32\glu32.dll”
“noise.exe”: 已加载“C:\Windows\System32\ddraw.dll”
“noise.exe”: 已加载“C:\Windows\System32\dciman32.dll”
“noise.exe”: 已加载“C:\Windows\System32\setupapi.dll”
“noise.exe”: 已加载“C:\Windows\System32\cfgmgr32.dll”
“noise.exe”: 已加载“C:\Windows\System32\oleaut32.dll”
“noise.exe”: 已加载“C:\Windows\System32\ole32.dll”
“noise.exe”: 已加载“C:\Windows\System32\devobj.dll”
“noise.exe”: 已加载“C:\Windows\System32\dwmapi.dll”
“noise.exe”: 已加载“C:\Windows\System32\osg80-osgDBd.dll”
“noise.exe”: 已加载“C:\Program Files\OSG30VS2008\bin\osg80-osgUtild.dll”,已加载符号。
“noise.exe”: 已加载“C:\Program Files\OSG30VS2008\bin\osg80-osgGAd.dll”,已加载符号。
“noise.exe”: 已加载“C:\Program Files\OSG30VS2008\bin\osg80-osgViewerd.dll”,已加载符号。
“noise.exe”: 已加载“C:\Program Files\OSG30VS2008\bin\osg80-osgTextd.dll”,已加载符号。
“noise.exe”: 已加载“C:\Windows\System32\imm32.dll”
“noise.exe”: 已加载“C:\Windows\System32\msctf.dll”
“noise.exe”: 已加载“C:\Program Files\OSG30VS2008\bin\osgPlugins-3.0.0\osgdb_gifd.dll”,已加载符号。
“noise.exe”: 已卸载“C:\Program Files\OSG30VS2008\bin\osgPlugins-3.0.0\osgdb_gifd.dll”
“noise.exe”: 已加载“C:\Windows\System32\uxtheme.dll”
“noise.exe”: 已加载“C:\Program Files\360\360Safe\safemon\safemon.dll”
“noise.exe”: 已加载“C:\Windows\System32\shell32.dll”
“noise.exe”: 已加载“C:\Windows\System32\shlwapi.dll”
“noise.exe”: 已加载“C:\Windows\System32\psapi.dll”
“noise.exe”: 已加载“C:\Windows\System32\wininet.dll”
“noise.exe”: 已加载“C:\Windows\System32\normaliz.dll”
“noise.exe”: 已加载“C:\Windows\System32\iertutil.dll”
“noise.exe”: 已加载“C:\Windows\System32\urlmon.dll”
“noise.exe”: 已加载“C:\Windows\System32\version.dll”
“noise.exe”: 已加载“C:\Windows\System32\ws2_32.dll”
“noise.exe”: 已加载“C:\Windows\System32\nsi.dll”
“noise.exe”: 已加载“C:\Windows\System32\netapi32.dll”
“noise.exe”: 已加载“C:\Windows\System32\netutils.dll”
“noise.exe”: 已加载“C:\Windows\System32\srvcli.dll”
“noise.exe”: 已加载“C:\Windows\System32\wkscli.dll”
“noise.exe”: 已加载“C:\Windows\System32\atiglpxx.dll”
“noise.exe”: 已加载“C:\Windows\System32\atioglxx.dll”
“noise.exe”: 已加载“C:\Windows\System32\atigktxx.dll”
“noise.exe”: 已加载“C:\Windows\System32\aticfx32.dll”
“noise.exe”: 已加载“C:\Windows\System32\atiadlxx.dll”
“noise.exe”: 已加载“C:\Windows\System32\userenv.dll”
“noise.exe”: 已加载“C:\Windows\System32\profapi.dll”
“noise.exe”: 已加载“C:\Windows\System32\wtsapi32.dll”
“noise.exe”: 已加载“C:\Windows\System32\wintrust.dll”
“noise.exe”: 已加载“C:\Windows\System32\crypt32.dll”
“noise.exe”: 已加载“C:\Windows\System32\msasn1.dll”
“noise.exe”: 已加载“C:\Windows\System32\cryptbase.dll”
线程 'Win32 线程' (0x1528) 已退出,返回值为 0 (0x0)。
线程 'Win32 线程' (0x1d68) 已退出,返回值为 0 (0x0)。
程序“[7812] noise.exe: 本机”已退出,返回值为 0 (0x0)。

该用户从未签到

发表于 2013-6-4 20:52:57 | 显示全部楼层
osg读取jpg的插件没编译吧?

该用户从未签到

发表于 2013-6-5 21:57:43 | 显示全部楼层
我勾选了所有插件的编译了的,编译生成的文件夹里面也有这些dll
D:\1.JPG

该用户从未签到

发表于 2013-6-5 21:58:29 | 显示全部楼层
D:\1.jpg

该用户从未签到

发表于 2013-6-5 22:09:19 | 显示全部楼层
补充个图片
1.jpg

该用户从未签到

发表于 2013-6-5 22:29:13 | 显示全部楼层
还有个信息是:在cmd里面用osg -image 读取图片是ok的,
运行例子osgimagesequenced.exe  会提示不能加载libpng13d.dll

该用户从未签到

发表于 2013-8-3 15:25:28 | 显示全部楼层
zxlin0 发表于 2013-6-5 21:58

你好。请问这个图片是在哪里下载的??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表