- 56
- 0
- 约1.77万字
- 约 11页
- 2018-02-02 发布于浙江
- 举报
idl入门教程_09_编写idl程序
第九章 编写 IDL 程序
本章概述
尽管IDL 是一个程序语言,但在官方的IDL 文档里是不可能发现如何编写IDL 程序的
方法。当然,这并不意味着只有一个正确的方法。任何人,只要了解过那些和我一样的IDL
程序员,都知道一个优秀的IDL 程序员和一个不是那么优秀的程序之间的差距是很明显的。
作为和IDL 程序初学者长期打交道的人,作者见过了很多不是很好的程序。
出现这个问题,可以肯定是由于对 IDL 信息缺乏了解。因为大多数这样的人毕竟是科
学 ,而不是电脑程序员。他们很聪明,并且在干自己的本行,但他们并不是去编写优秀的
电脑程序。
如果只要遵循几条基本的原理,他们编写的程序就会出色,而且对他们自己也更有用。
因此,本章就是阐述这几个原理。
本章的任务就是展示怎样编写一个合理的复杂图形演示程序。而且这个程序能从 IDL
命令行上调用。同时也希望该程序能够将数据显示在可改变大小图形窗口中,从 IDL 命令
行上直接打印,或者直接传送到PostScript 文件中。此外,这个程序能够轻松将数据文件保
存成GIF 或JPEG 文件。即使这写程序采用不同的颜色,这个程序应该是具有颜色敏感功能,
而且能够和其他程序共存。而且,在程序中增加一个图形界面应该很简单,即使那些对该程
序一知半解的用户也可以容易掌握。
再者,这个程序应该维护简单,易扩展。简而言之,该程序应当以模块化方式来编写。
尽管可能不清楚为什么要这样做,这里还是有必要介绍以一下面向对象编程的概念,特别是
自身模块和方法的概念。如果已经了解这个程序的原理 ,那么就能够毫无困难地理解在
IDL5 中引进的对象类和方法方面的复杂知识。
基本的ImageBar 程序
这个基本程序的思路很简单,即显示图像,在图像周围显示坐标轴。并在此图像的上方
绘制一个颜色栏,用来表示图像色彩与其值的相关性。将这个程序取名为Imagebar 。结果与
图80 相似。
图片82:此程序显示了一个由轴环绕的图象,图象上方的色彩栏标出了图像值的范围。
这个程序的基本框架很简单。图像用一个类似于 Tvimage 的命令来显示。(程序
Tvimage,如果带关键字Position 就可用来定位显示图像。此外,它还可以根据图像输出设
备的不同而输出不同大小的图像。详细信息请参阅72 页的“用标准化坐标来定位图像”。)
坐标轴是用带关键字 NoData 的 Plot 命令绘制,色彩栏用 Colorbar 命令显示的。(程序
Coloebar 是并与本书配套使用的程序之一。)
注意,如果是在24 位颜色环境中运行这个程序,色彩分解应处于关闭状态。详细信息
请参阅87 页的“在24 位颜色环境中指定分解颜色”。要使颜色分解处于关闭状态,键入
IDLDevice, Get_Visual_Depth=thisDepth
IDLIF thisDepth GT 8 THEN Device, Decomposed=0
如果愿意,也可将上述代码添加到下面的Imagebar 程序中。
新建一个文本编辑窗口,并且给程序命名为ImageBar 。其定义如下所示
PRO ImageBar, image
其中,image 是要显示的二维图像。
作者喜欢编写简单易懂程序,即使那些不清楚程序如何工作的用户也能够看懂。如果那
样,即使用户不知道要将图像作为程序的第一个参数,程序也可以让用户有机会打开并读取
一个图像文件。
编写这个程序的目的之一就是能够在 Z 图形缓冲区或在 PostScript 文件中输出显示图
形。那两个图形输出设备既不支持窗口,也不支持组件程序。因此,程序要生成一个命令,
类似于Window 或一个在支持窗口的图形设备中创建窗口的命令。
为达到这个目的,可以使用!D.Flags 系统变量。如果在这个变量的第八位的值不为0,
那么当前图形设备就支持窗口。用256 和这个系统变量进行逻辑AND 运算,如果返回值为
0,那么当前的图形设备就不支持窗口。
这些代码让用户有机会在支持窗口的图形设备上打开图像文件。从这个意义上说,参数
image 可以说是一个可供选择的参数。如果设置不支持窗口,参数image 就是一个必须的参
数了。增加了逻辑判断的代码如下
IF N_Params( ) EQ 0
原创力文档

文档评论(0)