基于IDL直接图形法的图像显示

2017-04-09 14:01李琳琳
环球人文地理·评论版 2017年1期
关键词:编程语言代码组件

李琳琳

摘要:本文发挥IDL强大的图形处理功能,将图像文件,利用IDL编程语言,显示在窗口中,并通过指针传递,将文本路径实时更新,进而得到一个完整的独立式的图形数据读取、显示、参数传递等程序。

关键词:IDL语言;图形可视化

引言:IDL全称交互是数据语言。是一个拥有强大的数据处理能力,与多种编程语言交互式编程,兼容ODBC数据库和跨平台应用开发的一门编程语言。由于其功能强大,简单易学,使其应用领域颇为广泛。例如,美国国家航空航天局(NASA)在太空飞船中的使用IDL研究紫外线放射现象;生物专家利用IDL开发用于观察人类大脑的核磁共振图的MRIViewer。还包括大家所熟知的ENVI,也是利用IDL编写开发。

1 系统开发环境

IDL的图像显示可以基于两种图像显示方法实现。一种是直接利用用户设定的数据进行显示,这种方法称为直接图形法。另一种是利用对象引导程序,即将数据显示在创建显示窗口的对象窗口里。对于一个程序而言,界面与事件处理则是基础组成部分。

界面与事件处理一般步骤:

(1)需求分析,列出需要的功能模块;

(2)设计流程图;

(3)设计逻辑图;

(4)事件功能的实现;

(5)编写功能函数;

(6)代码集成,成果显示。

2 界面设计

整个程序的界面组成是由的widget_base()组件作为界面容器,在该容器中添加了widget_button()(按钮组件)、widget_draw()(显示组件)以及widget_text()(文本组件)等构成。

利用widget_base()创建一个容器组件,即程序显示框架。在file按钮下,创建文件打开与关闭按钮,通过xsize、ysize设置其大小,利用uname实现组件功能。其代码如下:

tlb=widget_base(mbar=mbar,/column,/frame)

wfile=widget_button(mbar,value='file',xsize=50,ysize=50)

wexit=widget_button(wfile,value='exit',uname='Exit')

tOpen=widget_button(TBbase,value='open.bmp',/bitmap,$

uname='Open',xsize=40,ysize=40,xoffset=200,yoffset=150)

为了让程序界面设计更加友好,因此在程序界面底部添加程序运行版本信息组件。

text=widget_text(tlb,xsize=.6,ysize=.5,value='IDL 8.0 LBV BandMath ')

3 TIFF格式数据的图像显示

由于遥感影像来源广泛,因此,数据格式也大不相同。例如,ASCII码(文本)文件需要利用READF函数进行读取;JPEG格式文件需要用READ_JPEG()函数读取;使用READ_IMAGE读取BMP图像。本文主要针对TIFF格式数据进行读取与显示。

1)数据读取。TM数据拥有多波段数据信息,为了有目的性的选读文件,利用n_elements()函数,对输入的文件进行判断。对于不符合要求的文件,实施警告处理并要求重新筛选。本文采用简单的两组TIFF影像数据进行叠加显示。代碼如下:

file=dialog_pickfile(title='pick file',filter='*.tif')

n=n_elements(file)

if n eq '2' then begin

aa=file[0]

a=read_tiff(aa)

bb=file[1]

b=read_tiff(bb)

endif else begin

war=dialog_message('Erro',/error)

return

endelse

2)数据叠加显示。卫星数据是按照行进行存储的,与IDL数据扫描的原理一样。因此,可以利用数组方法,将得到的两幅影像进行叠加运算。代码如下:

image_result=[a+b]

tv,image_result

4 代码的集成及图像显示

两个事件之间利用指针传递,从而实现界面与事件处理之间的关系。首先,对文件读取路径实施初始化,然后对文件读取路径进行实时更新,并显示在程序界面上。

实现主要代码如下:

Pro A

pState={WINID:WinID,xtext:xtext,$

curpath:'D: '}

widget_control,tlb,set_uvalue=ptr_new(pState)

END

Pro B

widget_control,ev.top,get_uvalue=pstate

END

如果指针传递成功,叠加后的数据影像便可以完整显示在创建的显示区域了。

参考文献

[1]董彦卿 IDL程序设计——数据可视化与ENVI二次开发。高等教育出版社

[2]韩培友 IDL可视化分析与应用。西北工业大学出版社

[3]盖迎春 IDL 在青藏铁路地理信息系统中的应用研究,2007(6),冰川冻土

猜你喜欢
编程语言代码组件
无人机智能巡检在光伏电站组件诊断中的应用
压力-体积转换在CFC编程语言中的实现解析
新型碎边剪刀盘组件
U盾外壳组件注塑模具设计
Java编程语言的特点与应用
创世代码
创世代码
创世代码
创世代码
浅谈不同编程语言对计算机软件开发的影响