osgEarth示例分析——osgearth_noisegen

前言

osgearth_noisegen示例,展示生成噪音图。也就是根据设置生成声音曲线,在绘制到图上。但是写入文件总是报错。

osgDB::writeImageFile 这个方法,我的理解,它就是要把输入的内容输出到二维图文件中的。并且也进行了测试,但是却行不通。

执行命令:osgearth_noisegend.exe --size 10    // 其他参数都设置默认了

代码分析

#include <osg/Notify>
#include <osgGA/GUIEventHandler>
#include <osgGA/StateSetManipulator>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgEarth/MapNode>
#include <osgEarth/ImageLayer>
#include <osgEarth/SimplexNoise>
#include <osgEarthUtil/AutoClipPlaneHandler>
#include <osgEarthUtil/Controls>
#include <osgEarthSymbology/Color>
#include <osgEarthDrivers/tms/TMSOptions>
#include <osgEarthDrivers/wms/WMSOptions>
#include <osgEarthDrivers/gdal/GDALOptions>
#include <osgDB/WriteFile>
#include <osg/Image>

using namespace osgEarth;
using namespace osgEarth::Drivers;
using namespace osgEarth::Util;

int usage()
{
    OE_WARN << "\n"
        "osgearth_noisegen --size n             ; image dimension\n"
        "                  --out string         ; output filename\n"
        "                  [--frequency n]      ; default = 16\n"
        "                  [--octaves n]        ; default = 12\n"
        << std::endl;
    return -1;
}
/**
 * How to create a simple osgEarth map and display it.
 * 如何创建一个简单地图并展示
 */
int
main(int argc, char** argv)
{
    osg::ArgumentParser arguments(&argc,argv);

	// 传入尺寸
    int dim;
    if (!arguments.read("--size", dim))
        return usage();

	// 输出文件名。
	// 如果设置为如下格式,则会分别报错如下:
	// git tif:not implemented
	// png jpg:write error
	// osg :file not handled
	// osgb:虽然此格式不会报错,但是生成的osgb用osgviewer.exe 却无法打开。
    std::string out = "out.jpg";
    //if (!arguments.read("--out", out))
    //    return usage();

	// 频率默认16.0
    double freq = 16.0;
    arguments.read("--frequency", freq);

	// 12个8度音阶??
    int octaves = 12;
    arguments.read("--octaves", octaves);

	// SimplexNoise 单工噪声发生器类。
    SimplexNoise noise;
    noise.setFrequency(freq);
    noise.setOctaves(octaves);
    noise.setNormalize(true);// 对声音进行归一化
	// 创建所需尺寸dim的可平铺图像,
	// 图像将在[0..1]范围内进行直方图拉伸。
    osg::Image* image = noise.createSeamlessImage(dim);
	// 将图片写入文件中
    osgDB::writeImageFile(*image, out);// jpg 文件写入错误


	// 测试wirteImageFile方法,先读取一个jpg,再保存输出jpg
	//osg::ref_ptr<osg::Image> img = new osg::Image;
	//img = osgDB::readImageFile("D:\\FreeXGIS\\osgearth_gch\\data\\resources\\textures_us\\commercial\\1Flint_sm.jpg");
	//osg::ref_ptr<osg::Image> img2 = new osg::Image;
	//img2->setImage(img->s(), img->t(), img->r(), img->getInternalTextureFormat(), img->getPixelFormat(), img->getDataType(), img->data(), img->getAllocationMode());
	//osgDB::writeImageFile(*img2, "img2.jpg");

    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值