查看: 2271|回复: 3

如何保存osg::Image数据

[复制链接]

该用户从未签到

发表于 2010-7-22 11:10:58 | 显示全部楼层 |阅读模式
本帖最后由 spiritkay 于 2010-7-22 11:15 编辑

我需要生成一个二进制记录文件,用来保存场景数据,场景里面含有图片。
我不想记录完还要附带一些图片文件,希望能将图片数据同时保存在这个二进制文件中。
我现在想到的方法是:
    osg::ref_ptr<osg::Image> image = new osg::Image();
    image = osgDB::readImageFile(“test.bmp”);
    if(image)
    {
        unsigned char* code = image->data();
        std:fstream fou("code", std::ios::binary);
        fou<<code;
        fou.close();
    }
但是再从code这个文件读回数据就有问题了。
    osg::ref_ptr<osg::Image> image = new osg::Image();
    std::ifstream fin(“code”, std::ios::binary);
    if(fin.good())
    {
        std::string value = "";
        std::getline(fin, value);
        unsigned char* code = (unsigned char*)value.data();

        image->allocateImage(512,512,1, GL_RGB,GL_UNSIGNED_BYTE);
        image->setImage(512,512,1, GL_RGB,GL_RGB,GL_UNSIGNED_BYTE,code,osg::Image::USE_NEW_DELETE);
    }
    fin.close();

这个读进来的数据生成的image加到纹理里面就出异常。
osgDB::writeImageFile(*image, "i.bmp");这样输出也不行,出异常。
上面的参数应该是没有错的,不知道是不是这样输出到文件再读进来是不行的。
请大虾指点。

该用户从未签到

发表于 2010-7-22 14:26:50 | 显示全部楼层
问题是不是出在“unsigned char* code = (unsigned char*)value.data()“,这样转换string 跟 unsigned char*,出来的结果正确么?

该用户从未签到

发表于 2010-7-22 20:39:28 | 显示全部楼层
您跟踪一下您读取的image里面的data,,是否跟原来的image一样

该用户从未签到

发表于 2010-7-26 08:14:17 | 显示全部楼层
1、您必须保证两个Image的pixelFormat,dataFormat,packing等属性都是一致的
2、旧的Image对象在自动卸载时,会把data的内存区域删除掉!要避免这一特性,请设置setAllocationMode(NO_DELETE)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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