收藏 分享(赏)

IDL入门教程七(上).doc

上传人:hwpkd79526 文档编号:7228570 上传时间:2019-05-10 格式:DOC 页数:16 大小:143.50KB
下载 相关 举报
IDL入门教程七(上).doc_第1页
第1页 / 共16页
IDL入门教程七(上).doc_第2页
第2页 / 共16页
IDL入门教程七(上).doc_第3页
第3页 / 共16页
IDL入门教程七(上).doc_第4页
第4页 / 共16页
IDL入门教程七(上).doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、第七章 图形硬拷贝输出本章概要在使用 IDL 的时候,如何以硬拷贝形式再现屏幕中的图形是最复杂,也是最难理解的问题。然而,这是大多数献身科学的人的需求,但很少有令人完全满意的方法来和同事共享科学结果。本章将集中于 PostScript 输出,因为 PostScript 是普遍接收的一种输出媒介,大部分使用 IDL 的程序员都能使用 PostScript 打印机。所有关于 PostScript 的内容同样适用于其它输出设备,比如 HP 绘图仪和 PCL 打印机。具体来说,将学习:1. 如何选择硬拷贝输出设备2. 如何配置硬拷贝输出设备3. 如何将图形输出直接传送到打印机 4. 如何将图形输出传送

2、到一个文件中5. 如何为硬拷贝输出设备产生图形输出6. PostScript 输出与显示器的输出有什么不同7. 如何在 PostScript 页面上定位图形和图像8. 如何产生能包含在其它文档中的图形输出9. 如何编写能很容易地转化为硬拷贝输出的程序10. 如何在 PostScript 种使用颜色选择图形硬拷贝输出设备与设置其它图形显示设备一样,在 IDL 中,仍然使用 Set_plot 命令来设置图形硬拷贝输出设备:Set_Plot, option其中的 option 是下列的任何一种,注意 option 总是一个字符串,因此要使用单引号括起来。与 IDL 其它大多数字符串不一样,optio

3、n 对大小写不敏感。CGM 输出写入 CGM(计算机图形元文件)格式的文件中,CGM 也是一种独立于设备的文件格式,用于交换图形信息。CGM 文件能以三种形式之一编码:(1)文本, (2)二进制数据, (3)NCAR 二进制数据。HP 输出以惠普图形语言(HP-GL)格式写入一个文件,它适用于各种各样的HP-GL 笔式绘图仪。PCL 输出以惠普打印机控制语言( PCL)格式写入一个文件,它适用于各式激光和喷墨打印机。PRINTER 输出以任何适合于默认打印机的方式直接传送到该打印机。PS 输出以 PostScript 格式写入一个文件中。Z 输出被写入 Z 图形缓冲区。在打印完毕后,应再次使用

4、 Set_plot 命令将输出设备改回为图形显示设备的类型,以下是一些常用的显示设备:WIN 使用微软 Windows 或 NT 操作系统的个人计算机。MAC 使用 MacOS 操作系统的计算机X 使用 X Window 系统的计算机。只有一种设备能成为当前图形设备,可以通过检查!D.Name 系统变量来确定当前的设备是哪种,如下:IDLPrint,!D.Name注意,当设定设备名时,设备名对大小写不敏感,但当在代码中使用该名字时,就不一定不敏感了。存储在!D.Name 系统变量中的图形设备名是以大写字母形式存储的。这在下面的字符串比较语句中尤为重要:IDLIF !D.Name EQ PS T

5、HEN Print,Using PostScript配置图形硬拷贝输出设备一旦选定了图形输出设备,所有设备具体的配置参数都用 Device 命令通过关键字来控制。Device 命令可用的关键字主要取决于当前的设备。但打印设备(总是和默认的打印机相连)的设置也可以使用 Dialog_PrinterSetup 命令来设置( 详见 201 页的“配置和使用打印设备”) 。测定当前的设备配置使用 Help 命令,可以知道当前硬拷贝输出设备所设定的配置参数,如下:IDLHelp,/Device将能看到一系列的有关当前图形设备的当前设置参数及其参数值。这些信息可以用来配置设备。关于设备可用的颜色数,IDL

6、 使用的是哪种图形函数以及当前选择的硬件字体等等信息,都取决于所设定的当前设备是何种设备。注意,这些信息的显示随着每个硬拷贝输出选项的不同而不同。例如,键入下面这些命令来看 PostScript 输出设备缺省配置如何:IDLthisDevice=!D,NameIDLSet_Plot,PS IDLHelp, /DeviceIDLSet_Plot, thisDevice以下为 Help 命令的显示结果(在 Windows NT 机器上):Available Graphics Devices: CGM HP NULL PCL PRINTER PS WIN ZCurrent graphics devi

7、ce: PSFile: Mode: Portrait, Non-Encapsulated, EPSI Preview Disabled, Color DisabledOffset (X,Y): (1.905,12.7) cm., (0.75,5) in.Size (X,Y): (17.78,12.7) cm., (7,5) in.Scale Factor: 1Font Size: 12Font Encoding: AdobeStandardFont: Helvetica TrueType Font: # bits per image pixel: 4Font Mapping:(!3) Helv

8、etica (!4) Helvetica-Bold (!5) Helvetica-Narrow (!6) Helvetica-Narrow-BoldOblique(!7) Times-Roman (!8) Times-BoldItalic (!9) Symbol (!10) ZapfDingbats (!11) Courier (!12) Courier-Oblique (!13) Palatino-Roman (!14) Palatino-Italic (!15) Palatino-Bold (!16) Palatino-BoldItalic (!17) AvantGarde-Book (!

9、18) NewCenturySchlbk-Roman (!19) NewCenturySchlbk-Bold (!20) 常用的 Device 命令关键字大部分输出设备能允许以下关键字被用于 Device 命令( Z 设备例外) 。以下为想要知道的关键字。对于某个特定输出设备所使用的其它关键字可以查阅 IDL 在线文档资料。例如,PS 设备能接受将近 50 种不同的关键字。Close_Document 这个关键字在刷新了输出缓冲区后关闭图形文档。它被用于从打印机中排出打印页(使用 Printer 设备时) 。Close_File 这个关键字在刷新了缓冲区之后关闭该图形输出文件。Filename

10、 图形输出设备如果是将输出写入一个文件时有一个缺省文件名。如果没有指定文件名时就使用该文件。一般情况下,该文件名为idl.option,option 是所选择的硬拷贝输出设备类型。但也可以使用此关键字指定一个文件名来更改它。例如:IDLDevice,Filename=surface.epsInches 如果设置了这个关键字,那么关键字 XSize、YSize 、XOffSet 和YoffSet 及其设置都被认为是以英寸为单位而不是以缺省的厘米为单位来给定的。IDLDevice,XSize=4.0,/Inches若要回到以厘米为单位来设定尺寸和偏移量,用:IDLDevice,Inches=0La

11、ndscape 该关键字表示在纸的横向上输出。Portrait 该关键字表示在纸的纵向上输出。这是缺省值。XOffSet 该关键字确定输出的显示窗口的左下角在纸上的 X 方向上位置(在纵向模式下) 。关于横向模式下的位置详见 199 页的“计算 PostScript 在横向模式下的偏移量” 。XSize 该关键字确定输出显示窗口在纸上的宽度。YOffSet 该关键字确定输出的显示窗口的左下角在纸上的 Y 方向上位置(在纵向模式下) 。关于横向模式下的位置详见 199 页的“计算 PostScript 在横向模式下的偏移量” 。YSize 该关键字确定输出显示窗口在纸上的高度。IDLDevice

12、,XSize=4.0,YSize=7.0,/Inches注意一旦在图形输出设备上设定了某个关键字的值,该参数将一直有效,直到显式地更改它或退出 IDL。XSize,YSize,XOffSet 和 YOffSet 这些关键字一般是用于在输出页面上定位 “图形窗口” 。IDL 命令使用图形窗口的方式和图形输出使用位于显示设备上的图形窗口的方式完全一样。详细细节参考 184 页的“显示设备与 PostScript 设备的相似之处” 。创建 PostScript 文件当前的图形设备总是储存在系统变量!D.Name 中,所有图形命令将指向它。因此,实际上,尤其在 IDL 的程序中,选择一个硬拷贝输出设备

13、的代码一般都类似于下面这个例子,在这个例子中,先创建数据然后送到名为 output.ps 的一个 PostScript 文件中。注意,设备如何选择,如何配置,如何在图形命令写入文件后关闭。如果在关闭被打印机处理的文档时失败,它就不能将该页从打印机中排出,因为该文档缺乏 PostScript 的 Showpage 命令。该命令用于将该页排出。如果使用的是一台慢速打印机,这点就可不必关心。可以在打印机工作的时候,站起来喝一杯咖啡。IDL data= LoadData(1)IDL thisDeivce=!D.NameIDL Set_Plot, PSIDL Device, Filename=outpu

14、t.ps, XSize=4, Ysize=4,$/Inches, Xoffset=2.25, Yoffset=3.5IDL Plot, dataIDL Device, /Close_FileIDL Set_Plot, thisDevice将图形送到硬拷贝设备中对于制作硬拷贝输出的一般概念是,用 Set_plot 命令选择硬拷贝设备,,用 Device 命令并按要求设置该设备(或者在使用打印机的情况下,有时可用 Dialog_PrinterSetup) ,执行和用于输出到显示设备相同的 IDl 命令。然而这些命令将输出到文件或打印机,而不是输出到显示设备上。当完成调用 IDL 的图形命令后,关闭

15、输出文件或打印任务,并以便把文件传送指向所选择的打印机或绘图仪。如果是使用打印机,路由传送是自动完成的。 (详见181 页的“打印 PostScript 文件 ”的关于将 IDL 产生的 PostScript 文件传送到打印机的章节)。例如,要创建一个 PostScript 文件,可以键入如下命令:IDL thisDevice=!D.NameIDL Set_Plot, PSIDL Device, Filename=plot.ps, XSize=4, Ysize=4, $/Inches, Xoffset=2.25, Yoffset=3.5IDL Plot, LoadData(1)IDL Devi

16、ce, /Close_File如果在 UNIX 机器上产生这个 PostScript 文件,可以调用一个简单的 lpr 命令来将文件导向打印机(或者,机器上任何的等效命令) 。例如,从 IDL 中,可以键入这条命令:IDL Spawn, lpr plot.ps广义上讲,在显示设备上的输出和 PostScript 文件中的输出并非完全不同。 (麻烦在于细节) 。也就是说,Plot ,Surface,Contour 以及其它 IDL 图形命令无论是在显示设备上还是在 PostScript 文件中操作几乎一样。一方面,它们在如何进入文件这方面相似。例如,如果调用 Plot 或 Surface 命令,

17、并且显示设备为当前工作的图形设备,当前窗口的内容将被擦除,建立一个新的图形显示。在 PostScript 设备为当前图形设备时,类似的情况也会发生。每个命令将擦除显示设备上的窗口,启动一个新的 PostScript 输出页面。相应地,每个图形命令,例如 Oplot 或 XoutS,将在当前显示窗口中被执行,修改当前 PostScript 输出页面。例如,要显示一幅用 XYOutS 命令创建的带标题的图和一幅曲面图,可按如下键入:IDL Plot, LoadData(1), Position=0.1,0.1,0.9,0.8IDL XYOutS,0.5,0.9,Simple Plot,Align=

18、05,/NormalIDL Surface,Dist(41)如果这些命令被用到 PostScript 设备上而不是显示设备,将得到有两页输出的一个文件。要将这些命令的结果送到一个 PostScript 文件,可以按如下键入命令:IDL thisDevice=!D.NameIDL Set_Plot, PSIDL Device, XSize=3, Ysize=3, /InchesIDL Plot, LoadData(1), Position=0.1,0.1,0.9.0.8IDL XYOuts,0.5,0.9,Simple Plot, Align=0.5,/NormalIDL Surface, Di

19、st(41)IDL Device, /Close_FileIDL Set_Plot, thisDevice注意,无论是在显示窗口还是在 PostScript 窗口,都可以用关键字 Position 和 Normal来放置图形显示单元。这是一种用于创建在显示窗口的输出和在 PostScript 窗口的输出相同的好方法。关于此一会将学到更多的东西。有个技巧可以用于强制让 PostScript 文件前进一页,这就是使用 Erase 命令。如果要将几幅图像放在一个 PostScript 文件中,这也很方便。正常情况下,TV 或 TVScl 命令不擦除前面窗口的内容,所以,多个 TV 命令将简单地在前一

20、幅图像上面叠放下一幅。Erase命令可以将多幅图像放在同一文件中的不同页面。如下:IDL thisDevice=!D.NameIDL Set_Plot, PSIDL TV, LoadData(5)IDL EraseIDL TV, LoadData(7)IDL Device, /Close_FileIDL Set_Plot, thisDevice打印 PostScript 文件从 UNIX 机器上打印 PostScript 文件的最简单方法是调用 lpr 命令(或机器上其它任何的等效命令) 。但很可能犯一个的错误,企图在 IDL 中用类似如下的命令来打印 PostScript文件:Set_Plo

21、t, PSDevice, Filename=new_plot.psPlot, my_data, Title=Awful Nice PlotSpawn, lpr new_plot.ps不幸的是,这样行不通。原因是在试图用 UNIX 命令 lpx 打印 PostScript 文件之前,忘了关闭它。正确的顺序是:Set_Plot, PSDevice, Filename=new_plot.psPlot, my_data, Title=Awful Nice PlotDevice, /Close_FileSpawn, lpr new_plot.ps上面第一组命令失败的原因是,PostScript 文件需要

22、一个 PostScript Showpage 命令来从打印机中排出该页面。然而,只有使用 Close_File 命令或退出 IDL,Showpage 命令才被插入到 PostScript 中。在个人电脑上,在 IDL 中打印用 PostScript 设备产生的 PostScript 文件则有一点难度。事实上,大部分人都不介意,因为现在已有无数适合这种机器的工具来打印 PostScript 文件。在运行 MacOS 系统的计算机上打印 PostScript 文件在一个 Macintosh 机器上或是运行 MacOS 操作系统的计算机上,将一个 PostScript 文件送到打印机的最好方法是从

23、Bare Bones 软件公司下载一个免费的小程序 DropPS。可以从一般的 Macintosh 匿名的 ftp 软件网站下载。Macintosh 打印机总是附带一些打印工具,也能直接将 PostScript 文件传送到打印机上。在 Windows 计算机上打印 PostScript 文件在 Windows 95 和 Windows NT 操作系统上,将一个 PostScript 文件送到打印机的最好方法是下载一个免费的软件 GhostView 或 GhostScript。这些工具是 PostScript 文件浏览器,可以在打印前预览输出。GhostView 有一个漂亮的图形化界面,可以把

24、PostScript 文件直接传入打印机。详细资料可用通过 WWW 浏览器访问下列网址:http:/www.cs.wise.edu/ghost/GhostScript 也有运行于 UNIX 和 MacOS 操作系统上的版本。另外,还有一个很有意思的工具叫 PrintFile。这个小工具实现了拖放功能,而且能将PostScript 文件传送到本地或网络打印机。它甚至还能打印封装的 PostScript 文件。可以在下列网址找到这个程序:http:/heml.passagen.se/ptlerup/prfile.html生成封装的 PostScript 文件输出要生成能包含在其它文件(比如杂志文章

25、和书等)中的 PostScript 输出,在输出图形到 PostScript 文件前,必须在选择封装选项:Set_Plot, PSDevice, /EncapsulatedIDL 的封装 PostScript 文件可以成功地放到 LaTeX,Microsoft Word,FrameMaker 和其它一些文字处理文档中。注意,PostScript 封装文件不能在 PostScript 打印机上通过自己打印,尽管打印机在不停地动。因为,封装文件缺少 PostScript 的 Showpage 命令,此命令用于从打印机上排出该页面。这些文件必须被包含或封装在其它文件中进行打印。同时也要注意,当将封装

26、文件输入另一个文件中时,可能无法看到该图形,直到打印出来。除非有一个 PostScript 预览器或者用下面将要描述的 Preview 关键字。关闭封装 PostScript 文件,可以将 Encapsulated 设置为 0,如下;Device, Encapsulated=0封装 PostScript 图形的预览在正常情况下,封装的 PostScript 文件不能在包含它的文档中显示。也就是说,拥有此输入文件的方框总是白色或灰色。然而,PostScript 图形在整个文档被送到 PostScript 打印机时,可以正确的打印。如果想让文档中的该图形能看见,必须设定 Preview 关键字。此

27、关键字能让 PostScript驱动程序包含一幅该图形的位图和 PostScript 描述。这幅位图将显示在文档中的方框内,在文档被打印时就使用 PostScript 描述。Device, /Encapsulated, /Preview注意并非所有的文字处理程序都能显示位图预览图像。例如,预览图像在 Microsoft Word 5.1 或 Macintosh 机器上的 FrameMaker 4.0 上不能很好地显示。但在 Windows NT 机器上的 FrameMaker 5.1 就能很好地显示。用自己的文字处理软件试一下,看看显示如何。要将预览关闭,将关键字 Preview 设为 0 即

28、可。如下:Device, Preview=0注意,在 IDL5.2 中预览功能在 Macintosh 和 Windows 中有很大的提高。把 Preview 关键字值设为 2,便可以创建一个带有一幅 TIFF 预览图像的封装 PostScript 交换文件。文件的 PostScript 部分用于在 PostScript 打印机上打印。生成彩色的 PostScript 输出IDL 中支持彩色的 PostScript 输出。要输出彩色的输出,在 PostScript 设备上使用Color 关键字:Set_Plot, PSDevice, Color=1颜色关键字的设置自动地将当前色彩表复制到 Pos

29、tScript 文件中。 (类似于下面Set_Plot 命令中的 Copy 关键字。 )注意 PostScript 设备几乎总是支持 256 色,通常多于在显示设备上使用的颜色数。这将影响输出。详见 191 页的“问题:PostScript 设备拥有比显示设备更多的颜色”另一个自动装载色彩表的方法是在将图形设备设置为 PostScript 时,使用带 Copy 关键字的 Set_Plot 命令:IDL Set_Plot, PS, /Copy这个命令在文件被打开的第一次操作时,自动地将当前的颜色矢量复制到 PostScript文件中。注意,是显示色彩表被拷贝到 PostScript 文件中。通常

30、这些色彩表的颜色数目和PostScript 文件的色彩表的数目不同。详见 189 页的“问题:PostScript 设备使用背景与绘图颜色的区别” 。一旦设定 PostScript 设备为当前图形设备,可以用归一化的色彩表装载命令来装载色彩表。例如,可以键入如下命令:IDL LoadCT, 5, Ncolors=200IDL TVLCT, 70,255,70,255,70,0,200要将颜色选项关闭,可将 Color 关键字设为 0,如下:Device, Color=0PostScript 中的彩色图像与灰度图像缺省情况下,PostScript 设备为每一图像像素保存 4 位的信息。这对 16

31、 色或灰度级是足够了。如果想在 PostScript 输出中能有更多的颜色,Device 命令的 Bits_Per Pixel 关键字能设置到 8 位。例如,要输出一幅使用了全部 256 色的图像,可以如下设置设备:IDL image=LoadData(7)IDL thisDevice=!D.NameIDL Set_Plot, PSIDL Device, Color=1, Bits_Per_Pixel=8IDL TVSCL, imageIDL Device, /Close_FileIDL Set_Plot, thisDevice真彩图像读者的 PostScript 设备也许能支持 24 色或真

32、彩图像。真彩图像是一个 3D 的数组,其中有一维是 3。例如,一幅 m*n 的真彩图像可以是隔像素扫描(3,m,n),也可以是隔行扫描(m,3,n),还可以是隔波段扫描(m,n,3)。真彩图像可以以显示在显示器上的相同方式来显示在 PostScript 中。就是,在 TV 或TVScl 命令中使用 True 关键字,以表明真彩图像如何扫描的。确保将 Bits_Per_pixel 关键字的值设为 8。例如,一幅隔像素扫描真彩图像可以送到一个真彩 PostScript 设备上:IDL image3d=LoadData(16)IDL thisDevice=!D.NameIDL Set_Plot, P

33、SIDL Device, Color=1, Bits_Per_Pixel=8IDL TV, image3d, True=1IDL Device, /Close_FileIDL Set_Plot, thisDevice在继续阅读本章的内容前,确保当前的图形输出设备是显示设备。若不能肯定,使用以下命令:IDL Set_Plot, X ;或 Win 或 Mac在 PostScript 设备上创建高质量的输出创建看上去类似于显示设备输出的高质量硬拷贝输出的秘诀在于要理解显示设备和输出设备之间的共同点与不同点,比如,考虑显示设备和 PostScript 设备之间的相同点。显示设备和 PostScript

34、 设备之间的相同点最明显的相同点就是在每种设备上为显示图形而创建的图形窗口,尽管在每种设备上使用的方法不同。在一般的显示设备上可能会以下面的代码来创建图形窗口:Window, XSize=300, YSize=400, XPos=100, YPos=200创建了一个 X 方向 300 像素和 Y 方向 400 像素的图形窗口。此窗口的左下角位于显示器(比如,显示器的分辨率为 1024*768)的(100,200)处。而在 PostScript 设备上创建一个图形窗口的操作是类似的。区别在于不是使用Windows 命令来创建。 (当 PostScript 设备为当前图形输出设备时, Window

35、 命令是个无效的命令,这点在写程序的时候必须记住。 )而是用 Device 命令来告诉 PostScript 设备要创建的窗口的大小。例如:Device, XSize=3, YSize=4, XOffset=1, YOffset=2, /Inches可以这么想,PostScript 页面类似于整个显示设备,而用 Device 命令创建的区域类似于显示设备上的图形窗口。换句话说,调用上面的命令的含义是在显示设备上或在将要输出图形的页面上创建一个位置。IDL 使用归一化原则把图形放入任何一个窗口。那么,:当键入以下这样一个命令后会怎么样?Plot, FindGen(11)IDL 使用归一化原则来将

36、图形定位于窗口中。在此例中,IDL 用设备坐标来计算字符的大小,并通过它来决定图形缺省的边缘。该图形在这个边缘的基础上被置在窗口内,一般是正好填满整个图形窗口。但是在显示设备上的图形与在 PostScript 设备上的输出图形是否一样呢?尽管会很相似,很可能不是。原因在于在显示设备上对图形的解释方式与 PostScript 设备不一样。显示设备与 PostScript 设备之间的不同点显示设备与 PostScript 设备之间有几个不同点,这对于要想在 PostScript 设备上输出与显示设备上几乎一样的图形是非常关键的。有一两个例外的情况,它们的差别不是很大,或者这些差别看上去不重要。但是

37、以笔者个人的经验来看,若没有理解这些差异,要想生成高质量的硬拷贝输出将费很大的精力。问题:PostScript 窗口可能会有不同的纵横比例首先,一个相对较小的不同点,在显示设备上创建的图形窗口与在 PostScript 页面上创建的图形窗口的纵横比例可能不同。这并不奇怪,因为两个窗口的创建方法不同:显示设备上是使用 Windows 命令, PostScript 页面是使用 Device 命令。事实上,大部分使用者在 IDL 中显示图形时不用 Windows 命令。而是简单地使用 Plot或 Surface 命令以及它们打开的一个窗口。缺省窗口的大小随机器不同而不同,而且可由用户设置。在工作站上

38、,缺省的窗口大小为 640*512 像素大小。在 PC 上,缺省的窗口大小通常为显示设备尺寸的四分之一。在 PostScript 设备上,缺省的窗口大小为 7*5 英寸。三种情况下的纵横比(Y/X)为 0.800,0.750 和 0.714。很清楚,同样 Plot 命令的输出在三个窗口中不同,因为三个窗口纵横比不一样,而且,IDL 将填满 Plot 命令所获得的窗口。解决方法:让图形窗口的纵横比保持不变所以,创造完全一样的输出的第一条原则就是确保显示窗口和 PostScript 窗口具有相同的纵横比。这很容易做到。只要计算当前显示窗口的纵横比,并将 PostScript 窗口设为一致即可。例如

39、(假设在显示器上已经有一个打开的窗口) ,可以键入:IDL aspectRatio=Float(!D.Y_Vsize)/D.X_VsizeIDL thisDevice=!D.NameIDL Set_Plot, PSIDL Device, XSize=5, Ysize=5*aspectRatio, /InchesIDL Device, /Close_FileIDL Set_Plot, thisDevice这样,在显示窗口与 PostScript 输出中看上去相同的可能性就比以前大多了。笔者喜欢用 PSWindow 程序来创建一个与当前显示窗口有相同纵横比的 PostScript 图形窗口。 (p

40、swindow.pro 在已经下载的本书配套文件之中) 。该程序返回在 PostScript 页面上创建所能创建的最大图形窗口时所必须的尺寸和偏移量(默认以英寸为单位) ,所建立的窗口与当前图形窗口具有相同的纵横比。返回值用来设置 Device 命令的相应关键字,通常是它的_Extra 关键字。 (关于 _Extra 关键字详细信息见 240 页的“使用关键字继承” )看看它是如何使用的,首先打开一个图形窗口,并显示一幅线画图。IDL Window, XSize=400, YSize=300 ; Aspect Ratio=0.75IDL curve=LoadData(1)IDL Plot, C

41、urve现在用相同的纵横比创建一个 PostScript 窗口,并在上面画图。键入:IDL rightSize=PSWindow()IDL thisDevice=!D.NameIDL Set_Plot, PSIDL Device, _Extra=rightSize, /Inches, File=test.psIDL Plot,curveIDL Device, /Close_FileIDL Set_Plot, thisDevice如果有 PostScript 打印机或 PostScript 预览软件,将此文件传给它。比较输出内容和显示窗口中的内容。一样吗?不同?但相似吧?请继续!问题:PostS

42、cript 设备有更高的显示分辨率在默认状态下,IDL 在字符尺寸的基础上计算出图形的边缘,从而决定将图形的坐标轴放在图形窗口的何处。但用于计算边缘的字符尺寸在 PostScript 设备上和在显示设备上不一样。原因是 PostScript 设备有一个比显示设备更精细的分辨率。可以检查 IDL 系统变量!D.X_PX_CM(决定每厘米的像素个数)和!D.X_CH_SIZE(以设备坐标决定缺省字符 X 方向上的尺寸),看看有何不同。输入:IDL thisDevice=!D.NameIDL Print, !D.X_PX_CM, !D.X_CH_SIZEIDL Set_Plot, PSIDL Pri

43、nt, !D.X_PX_CM, !D.X_CH_SIZEIDL Set_Plot, thisDevice例如,在 Macintosh 计算机上的数据为:Mac: 28.35 6PS: 1000.00 222换句话说,在显示屏上的一个像素,在 PostScript 上就有大约 35 个像素。而且,两种设备的字符尺寸相对于分辨率的比率也不一样的。Macintosh 是:0.212 和 PostScript 是0.222。马上就明白了,在 IDL 中用设备坐标或像素坐标来定位任何一图形是个不好的主意,除非将分辨率因素考虑进去。例如,假设想在显示器上围绕一个 X 方向像素从 100 到200,Y 方向

44、像素从 150 到 250 的图像周围画一个方框,可能会这样画:xBox=100,100,200,200,100yBox=150,250,250,150,150PlotS, xBox, yBox, /Device在一个 400*400 相似素的显示窗口上,方框与窗口的大小之比为 1:16。在 10*10 厘米的 PostScript 窗口上,方框与窗口的大小之比将为 1:10,000!这是相当小的盒子,肯定不是所要的。解决方法:不用设备坐标来定位图形创建实际一致的图形输出的第二条原则是,确保在输出窗口中使用数据或归一化坐标而不是设备坐标来在图形窗口中定位图形。例如,如果按下面这样定义上面的方框

45、,它将在显示窗口和 PostScript 窗口两者中包围同样的相对区域:xBox=0.250, 00,200,200,100yBox=150,250,250,150,150PlotS, xBox, yBox, /Device字符尺寸与分辨率的比率影响输出的另外一种方式是,在图形窗口中放置图形输出的方法。回想一下,缺省情况下,IDL 使用边缘来在窗口中定位图形以及基于字符尺寸计算边缘。如果字符尺寸在显示设备上和在 PostScript 输出中不同,这将稍微影响图形输出。但可以用 Position 关键字来定位图形从而弥补这一点。 无论是使用显示窗口还是PostScript 窗口,都可用归一化坐标

46、来将坐标轴定位在准确的地方。(详见 50 页的“设置图形位置”。)上面简单的图可以使用以下命令以相同的方式放到任何一个窗口中。Plot, Load Data(1), Position=0.1, 0.1,0.95,0.95问题:PostScript 设备能使用不同的显示字体缺省时,IDL 使用 Hershey 字体输出图形。Hershey 字符集是一种典型的矢量字体。这些字体是用一些矢量描述的,显示时象被着色一样。使用矢量字体有两大优点:它们能很容易地在 3D 空间中缩放和旋转,而且与设备无关。矢量字体最大的缺点是:在象PostScript 打印机这类高分辨率输出设备上,其质量不如真实的 Pos

47、tScript 字体。正因为如此,许多人趋向于用 PostScript 字体来输出 PostScript 输出图形。这就产生了在显示屏上与在 PostScript 输出中稍有差异,因为在 PostScript 打印机上没有与 Hershey 矢量字体一一对应的字体。PostScript 字体必须代替 Hershey 字体。这导致字体字符的大小不同,这可能导致文字排列的问题。解决方案:仔细设计和定位文字这个解决方法就是要注意如何设计文本的输出。例如,如果可能的话,标题应以点为中心或者在 XYOutS 命令中用 Alignment 关键字来特意布置在某些点上。可以从图 65 中看出 Hershey

48、 和真实的 PostScript 字体的区别。图 65:左边的图是用 Hershey Simplex Roman 字体创建的。右边的图是用PostScript Helvetica 字体创建的。两幅图看上去类似,但不同。要选择一种真实的 PostScript 字体,可将系统变量!P.Font 或 Font 关键字设为 0。若没有其它信息的话,IDL 将根据表 10 的映射关系将 Hershey 字体映射到 PostScript 字体。可以使用以下命令随时查询 IDL 中的这种映射关系:Set_Plot, PSHelp, /Device注意,下表中的正常的默认字体 Simplex Roman 被映射到 Helvetica。在 PostScript的输出中,在同样的字体尺寸下,Helvetica 的字体稍大于 Simplex Roman。也就是说,应在图形输出时,使用代替字体定位文本必须小心,要用一种合理的从显示到硬拷贝的过度方式。实际中,这就意味着要将调节输出文本左右或中心对称的坐标归一化。例如,下面的代码是在图上生成一个图例:Plots, 0.2,0.3, 0.7,0.7, /NormalPlots, 0.2,0.3,0.6,0.6, LineStyle=3, /NormalXYOutS,0.32,0.7, Normal bias, /Normal, Alignment=0.0XY

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报