技术技巧分享(1)

好久没更新,随便写几个分享。

在最近软件开发过程中,总结了几个技术技巧,记录一下:

(1)正射影像生成及内存管理问题

(2)网络硬盘数据读写传输问题

(3)gdal Dataset 释放注意

一、正射影像生成及内存管理问题

使用OSG,离屏渲染生成正射影像。

首先,要提前准备好分辨率、影像大小、相机视角等信息,具体的,参考 OpenSceneGraph 里 osgautocapture.cpp 相关代码。

但 osgautocapture.cpp 是exe代码,每次只能执行一遍,且输出的图像大小固定。

如果存在这样一个需求:生成若干张分辨率相同,但图像大小不同的影像,那么,使用 osgautocapture.cpp 里的代码将很不方便。

一种方法是使用命令行,每次传递不同的参数,反复调用 exe 进行生成,但该方法效率很低,当生成的影像很多时,整个软件效率将会迅速降低。同时,以命令行调用 exe 存在不可控、不稳定的问题,如果出现错误,排查起来存在困难,提升维护成本。

那么,如果循环使用 osgautocapture.cpp 里的代码,那么,每次生成新的正射影像,因为需要重新配置参数,需要反复使用以下语句:

osg::ref_ptr<osg::GraphicsContext> pbuffer = osg::GraphicsContext::createGraphicsContext(traits.get());

那么后果就是在内存中创建不可删除的对象,最后导致内存占用迅速上升,最后导致OOM错误,或者被杀毒软件、操作系统认为是病毒而杀死。

那么,pbuffer是个什么东西呢?从代码可知,它是一个图形上下文对象,根据 traits 的配置而创建,而 traits 定义如下:

osg::DisplaySettings* ds

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值