没有合适的资源?快使用搜索试试~ 我知道了~
IDL入门教程九.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 170 浏览量
2023-02-28
20:32:59
上传
评论
收藏 192KB DOCX 举报
温馨提示
试读
11页
。
资源推荐
资源详情
资源评论
第九章 编写 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 位颜色环境中指定分解颜色”。要使颜色分解处于关闭状态,键入:
IDL>Device, Get_Visual_Depth=thisDepth
IDL>IF 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 THEN BEGIN
IF (!D.Flags AND 256) NE 0 THEN BEGIN
Image = GetImage ( Cancel= canceld, ‘m51.dat’,$
Xsize=340,Ysize=440)
IF CANCELD then return
ENDIF else begin
Message, ‘Please supply an image argument,’,/Continue
RETURN
ENDELSE
ENDIF
注意,GetImage 命令用来打开图像文件。程序 getimage.pro 是和本书配套使用的文件
之一。GetImage 是用来读取无格式数据文件的一个通用程序。它是一个对话框程序。详细
信息请参阅 291 页的“创建模态对话框程序”。
下一步,就是检查图像参数是必须是一个 2 D 图像。注意,当出现错误时,用 Message 命
令而不是 Dialog_Message 命令来提示错误信息。这是因为 Dialog_Message 是个组件命令。
同时在 Z 或 PostScrippt 设备里用 Dialog_Message 会导致错误。
S= Size (image)
IF S [0]NE 2 THEN BEGIN
Message, ‘Image argument must be 2D.’, /Continue
RETURN
ENDIF
最后,要定义 X 轴和 Y 轴矢量的默认值。(在现实的应用程序里,这些矢量可能代表确
切的物理含义,并且作为固定参数传递到程序中。但是,如果在这里也这么做,只会使例子
更加复杂,而对增加程序原理的理解毫无裨益。)
X=FindGen ( [1])
Y=FindGen( [2])
下一步,就可以绘制图形了。 这个图像显示在窗口的偏下部分,而窗口的上部分用来
显示颜色栏。
注意,窗口不是专门为显示图形而建立的。这是又能输出到 Postscript 文件,又能输出
到可改变大小的窗口的图形程序的重要特点。如果程序要能够在任何图形显示窗口或设备上
正常工作,应当如下所示:
imagePos=[ 0.15,0.15.0.9,0.75]
TVImage, image, Position=imagePos
接着,运用带关键字 NoData 的 Plot 命令图像周围画轴。记住,要使用相同的定位参数,
以确保坐标轴的范围与图像范围一致。此外,必须设置关键字NoErase,否则Plot 命令会擦
除刚才显示的的图像。键入:
Plot,X,Y, /NoDATA,xstyle=1,Ystyle=1,Position=imagePos, /NoEase
最后,在图像上方绘制颜色栏。通过变量 imagePos 可以计算出颜色栏的位置,还应该
稍微地延伸图像的长度,并颜色栏定位在图像上方。键入:
barPos=[imagepos[o],(imagepos[3]+0.15,imagepos[2],$
(imagepos[3]+0.15)+0.05]
剩余10页未读,继续阅读
资源评论
G11176593
- 粉丝: 6674
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功