sthpen 发表于 2009-6-3 15:26:31

如何从.ive文件中提取 纹理image

//node = osgDB::readNodeFile("D:\\share\\terrain\\terrain.ive");
        osg::Node *node = osgDB::readNodeFile("D:\\d.ive");

        TextureVisitor textureTV;
        node->accept( textureTV );

        std::map<std::string, osg::Image*> imageList = textureTV.getImages();
       
        std::map<std::string, osg::Image*>::iterator iter = imageList.begin();

        unsigned int cnt = 0;
        char* buffer = new char;

        for( ;iter != imageList.end(); iter++ )
        {
                sprintf(buffer, "d:\\TextureImage%d.bmp", cnt++ );
                std::string str = iter->first;
                osg::Image* img = iter->second;
                unsigned int aaa = img->getTotalSizeInBytes();
                aaa = img->getPixelSizeInBits();
                osgDB::writeImageFile(*(iter->second), buffer);
        }

其它代码类似OSG编程入门指南6.2.4
读入.osg文件时可以正确取得,但是读入.ive文件就不行(获取图像不正确 有哪位知道原因吗?

FlySky 发表于 2009-6-4 00:18:53

编写访问器,,进行遍历~~~~~

sthpen 发表于 2009-6-4 09:20:48

已经编写的访问器,并且可以成功获取.osg文件中的纹理图片。但是加载.ive文件获取不了。
请高手指教    谢谢

tan_dunming 发表于 2009-6-4 09:22:38

先使用osgDB另存为osg文件 再导出图片能行吗?

sthpen 发表于 2009-6-4 09:31:39

>先使用osgDB另存为osg文件 再导出图片能行吗?
=>这是一个方法 但是这样做不怎么好 影响性能啊。
有哪位高手直接从.ive获取过纹理图片吗?   请赐教

array 发表于 2009-6-4 10:45:58

我不知道您的TextureVisitor的具体内容是什么,因此无法判断您用了什么方法来获取ive文件中的图片。一般来说,由于ive是压缩格式,图片数据已经保存为Image对象,因此我们可以从Texture对象的getImage()中得到图片数据并提取。

此外,您的问题应该和GIS/VPB没有直接关系,因此建议您今后把类似的问题发在主讨论区,不然我个人和其他一些朋友可能不会立即注意到,多谢理解。

zhh_1021 发表于 2010-10-24 09:39:34

我就是学习的《OSG编程入门指南 》上纹理节点访问的例子 ,ive格式的提取不出纹理来啊,
osg::Texture2D对象——getImage()
跟ive生成时选择的压缩方式有关吗?
不压缩生成ive可以获取到纹理的
--compressed ……就不行了

FlySky 发表于 2010-10-24 11:12:56

书中的例子不可能考虑到各个方面,只是提供一种可行的方案或者方法,您根据您的具体应用可以修改~~~这里需要您重写一下遍历器的纹理获取和存储方式即可~~~~~~·
页: [1]
查看完整版本: 如何从.ive文件中提取 纹理image