查看: 1286|回复: 8

osg::Image所指向的图像内存如何保存为内存中的jpg格式

[复制链接]

该用户从未签到

发表于 2016-5-24 17:51:55 | 显示全部楼层 |阅读模式
如题,目前通过osgDB::readNodeFile获取了.osgb文件中的纹理,但是其解析后指向的是osg::image,如何将osg::image中的图像信息转化为内存中的jpg,不是本地文件,因为本地文件会耗时,希望直接在内存中。或者解析数据后如何直接获取数据中的jpg数据流。

该用户从未签到

 楼主| 发表于 2016-5-24 17:52:35 | 显示全部楼层
第一次发帖子,还望多多帮忙,谢谢啦!

该用户从未签到

发表于 2016-10-19 11:25:11 | 显示全部楼层
你好,请问这个问题解决了吗?我现在困在这个问题中好长时间了…

该用户从未签到

发表于 2016-10-19 13:42:47 | 显示全部楼层
___MMM 发表于 2016-10-19 11:25
你好,请问这个问题解决了吗?我现在困在这个问题中好长时间了…

这个可以使用NodeVisiter遍历模型的渲染状态Stateset,然后从渲染状态Stateset中获取纹理的属性信息,再从纹理中getImage().

该用户从未签到

发表于 2016-10-19 14:56:53 | 显示全部楼层
ManvCode 发表于 2016-10-19 13:42
这个可以使用NodeVisiter遍历模型的渲染状态Stateset,然后从渲染状态Stateset中获取纹理的属性信息,再从 ...

你的意思是这样吗?
osg::Texture2D* tex2D = NULL;
tex2D = dynamic_cast<osg::Texture2D*>(state->getTextureAttribute(n,osg::StateAttribute::TEXTURE);
osgImage = tex2D->getImage();
我这样获取到的图像有文件名,但是_data为空,不知道您有没有什么解决办法,或者说数据不是这样获取的?

该用户从未签到

发表于 2016-10-19 17:57:29 | 显示全部楼层
本帖最后由 ManvCode 于 2016-10-19 18:27 编辑
___MMM 发表于 2016-10-19 14:56
你的意思是这样吗?
osg::Texture2D* tex2D = NULL;
tex2D = dynamic_cast(state->getTextureAttribute ...


跟_data应该是没有关系的,只有在你自己创建图片时,才会用到setdata()去设置图片数据,这时_data才有数据,并且_data中存放的是图像的颜色信息,_data是unsigned char*也就是说是字符数组,每三个字符控制一种颜色(r,g,b),这些数据对你是没有什么用处的。

该用户从未签到

发表于 2016-10-20 12:47:41 | 显示全部楼层
ManvCode 发表于 2016-10-19 17:57
跟_data应该是没有关系的,只有在你自己创建图片时,才会用到setdata()去设置图片数据,这时_data才有 ...

这样啊。我现在的目的是把osg::Image指针指向的图片对象转换成IStream类型的流,然后用CImage的方法在MFC中展示。那请问一下我要怎么获取到osg::Image对象的数据呢?或者说不获取数据的话,有其他的办法可以在MFC中显示吗?
(我刚开始做这个,还有很多不是很了解的地方,非常感谢您的帮助)

该用户从未签到

发表于 2016-10-20 14:18:16 | 显示全部楼层
getData可以获取到像素值,rgb或rgba存放,取出来根据个人喜好去进一步处理

该用户从未签到

发表于 2016-10-20 16:21:49 | 显示全部楼层
gis_wudi 发表于 2016-10-20 14:18
getData可以获取到像素值,rgb或rgba存放,取出来根据个人喜好去进一步处理

您好,请问一下您说的getData方法是osg::Image类中的吗?我在帮助文档中没有找到…
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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