2022年IDL入门教程七 2.pdf

上传人:Che****ry 文档编号:35292691 上传时间:2022-08-21 格式:PDF 页数:11 大小:1,015.99KB
返回 下载 相关 举报
2022年IDL入门教程七 2.pdf_第1页
第1页 / 共11页
2022年IDL入门教程七 2.pdf_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《2022年IDL入门教程七 2.pdf》由会员分享,可在线阅读,更多相关《2022年IDL入门教程七 2.pdf(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、解决方法:在 PostScript输出中确保恰当地缩放数据这个问题可以用两种方法来解决。第一,一旦将 PostScript 设备设置为当前图形设备时,可以重新装载色彩表。或者, 确保将图像数据缩放到显示设备所能得到的颜色范围内。重新装载色彩表将使显示设备上的输出与PostScript 输看上去几乎一样。 为了使输出完全一样 (当然,是在各种颜色发生技术的约束条件下),有必要将数据缩放到显示设备所能得到的颜色数量范围内。如果色彩表和数据一样,输出也将一样。(关于正确缩放数据参见66 页的“缩放图像数据” 。 )注意,在缺省情况下,在PostScript 图像中每个图像像素只保存四位信息。这意味着

2、,即使 PostScript 设备能够显示256 色,但在输出图像中将只能看到16 色。如果想看到全部256 色,必须储存8位的像素信息。可以用Bits_Per_Pixel 关键字在Device 命令中设置,如下:Device, Bits_Per_Pixel=8, Color=1 问题:PostScript设备显示图像时的不同显示设备与PostScript 设备的另外一个不同点是显示图像时的区别。尤其是,显示设备具有固定尺寸的像素,而PostScript 设备具有可变的像素尺寸。换句话说,在PostScript 中一个像素实际上可以是任意矩形尺寸。这会影响图像输出到PostScript 文件中

3、的方法PostScript 设备根据PostScript 画图窗口的尺寸和图像的纵横比来决定图像的大小。例如,如果 PostScript 的绘图窗口为2*2 英寸,并且要输出的图像为360*360 像素,那么一个简单的 TV 命令就能输出2*2 英寸的 PostScript 图像:IDL thisDevice=!D.Name IDL image=LoadData(7) IDL Set_Plot, PSIDL Device, XSize=2, Ysize=2, /Inches, /Encapsulated IDL PlotS, 0,1,1,0,0,0,0,1,1,0, /Normal IDL T

4、V, image IDL Device, /Close_File IDL Set_Plot, thisDevice 上述命令产生的输出如图69 所示。图 69:PostScript 设备用可变的像素来使图像适应输出窗口的尺寸。这里的尺寸为2*2 英名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 寸。然而,如果输出窗口尺寸与原图像的纵横比不同时,图像将改变尺寸以保证自身的纵横比,其中有一方向将完全填满输出窗口。例如,同样使用上述

5、图像,这里的输出窗口为X方向 1 英寸, Y 方向 2 英寸。IDL Set_Plot, PSIDL Device, XSize=1, Ysize=2, /Inches, /Encapsulated IDL PlotS, 0,1,1,0,0,0,0,1,1,0, /Normal IDL TV, image IDL Device, /Close_File 这些命令得到的结果见图70。注意,此图像只有1*1 英寸,只填充了输出窗口的一半。图 70:当输出窗口和原图像具有不同的纵横比时,图像将改变尺寸以维持自身的纵横比,并且其中的一个方向将充满整个输出窗口。类似地,如果有一个2*1 英寸的输出窗口,

6、如下:IDL Set_Plot, PSIDL Device, XSize=2, Ysize=1, /Inches, /Encapsulated IDL PlotS, 0,1,1,0,0,0,0,1,1,0, /Normal IDL TV, image IDL Device, /Close_File 结果见图71。图 71:此图类似于图70,除了输出窗口的X 方向是 Y 方向的两倍外。如果 PostScript 绘图窗口是X 方向 1 英寸和 Y 方向 3 英寸,那么 TV 命令输出的结果是1*1 英寸的图像。事实上,图像总是根据输出窗口的尺寸以及原图像的纵横比来确定大小可能会造成困难。例如,

7、假设有一个500*500 像素的显示窗口,并且想将图像显示在400*400 像素大小的窗口的中心。 更进一步假设, 要在图像的周围画一外框。可能会用以下命令在窗口中定位显示图像:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - IDL image=LoadData(7) IDL image=Congrid(image, 400, 400, /Interp) IDL Window, XSize=500,Ysize=500 IDL

8、TV, image, 0.1, 0.1, /Normal IDL Plot, FindGen(100), /NoData, /NoErase, $ Position=0.1,0.1,0.9,0.9 如果当前图形窗口为显示设备时,可以看到图72 所示的输出。图 72:在显示设备上带边框的图像。但如果在 PostScript 设备上运行这些命令(不是用 Window 命令) ,将得到非常不一样的结果。 尤其是, 图像根据输出窗口尺寸改变大小,很可能导致图像的外框的位置不对,如图73。解决方法:使用TV 命令设置图像大小设置将进入PostScript 输出中的图像尺寸的正确方法是在TV 命令中使用的

9、XSize 和YSize 关键字。例如,要在PostScript 输出中得到与图72 具有相同输出的正确方法如下:IDL thisDevice=!D.Name IDL Set_Plot, PSIDL Device, XSize=3.5, Ysize=3.5, /Inches, /Encapsulated IDL TV, image, 0.525, 0.25, XSize=2.8, Ysize=2.0, /Inches IDL Plot, FindGen(100), /NoData, /NoErase, $ Position=0.15,0.10,0.95,0.90 IDL Device, /Cl

10、ose_File IDL Set_Plot, thisDevice 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 图 73:在 PostScript输出中,图像的尺寸是根据输出窗口的尺寸来决定的,这可能并非用户想要的,如本图所示。图 74:在 PostScript窗口中,缩放和放置图像的正确方法是利用TV命令的缩放和定位的能力。将此图与图73 比较一下。如果想编写一个通用的IDL 程序, 就象上面这个, 无论窗口大小如何变化

11、都能正常工作,无论是在显示设备上还是在PostScript 文件中,也同样能工作。这时候,也许需要计算图像在显示窗口中基于设备坐标的大小和位置。在 PostScript 设备上和在显示设备上工作时,唯一的真正区别在于如何计算图像的尺寸。程序imageax.pro 就是用于此目的(此程序在下载的本书配套程序中) 。PRO ImageAx, image, Position=position IF N_PARAMS() EQ 0 THEN Message, Must pass image argument. IF N_ELEMENTS(position) EQ 0 THEN $ position =

12、 0.2, 0.2, 0.8, 0.8 ; Get the size of the image in pixel units. s = SIZE(image) imgXsize = s(1) imgYsize = s(2) ; Calculate the size and starting locations in pixels. xsize = (position(2) - position(0) * !D.X_VSize 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共

13、 11 页 - - - - - - - - - ysize = (position(3) - position(1) * !D.Y_VSize xstart = position(0) * !D.X_VSize ystart = position(1) * !D.Y_VSize ; Size the image differently in PostScript. IF !D.NAME EQ PS THEN $ TV, image, xstart, ystart, XSize=xsize, YSize=ysize ELSE $ TV, Congrid(image, xsize, ysize,

14、/Interp), xstart, ystart ; Draw the axes around the image. Plot, FIndGen(100), /NoData, /NoErase, Position=position END 打开几个不同尺寸的窗口运行该程序,输出依次显示在每一个窗口中。注意, 图像的纵横比不再保持了。反而,它在窗口的位置保持不变。IDL image=LoadData(9) IDL Window, XSize=400, YSize=400, /Free IDL ImageAx, image IDL Window, XSize=300, YSize=500, /Fr

15、ee IDL ImageAx, image IDL Window, XSize=600, YSize=300, /Free IDL ImageAx, image 可以运行这个程序,将输出结果传送到任何窗口,无论是显示设备还是PostScript 设备都可以。例如,可以用下面的命令将输出送到PostScript 文件中。IDL Set_Plot, PSIDL Device, XSize=3.5,YSize=2.5,/Inches, /Encapsulated IDL ImageAx, image, Position=0.15,0.15,0.95,0.95 IDL Device, /Close_F

16、ile 输出结果见图75。想以完全独立于设备的方式来显示图像,笔者偏爱用TVImage 程序(已下载的本书配套程序)。它不仅能用Position 关键字按上面ImageAx 的风格来在显示窗口中定位图像,同时如果愿意,还能保持图像的纵横比。关于TVImage 命令详见72 页的“用归一化坐标定位图像” 。IDL Window, XSize=600, YSize=400, /Free IDL TVImage, image, Position=0.15,0.15,0.95,0.95, $ /Keep_Aspect_Ratio 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -

17、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 图 75:在 3.5*3.5英寸的输出窗口中运ImageAx 程序。注意,图像的纵横比不再保持了,尽管保留了其在窗口中的位置。在 PostScript 中显示图像的另一个极其重要的地方是,缺省情况下, PostScript 设备对每个图像像素只保留四位的信息。这对 16 色或是灰度级的图像已经足够了。如果想要 256 色,应该将关键字Bits_Per_Pixel 设为8,像这样:IDL S et_Plot, PSIDL Device, Bits_Pe

18、r_Pixel = 8, Color = 1 在横向输出模式中计算PostScript的偏移量纵向模式下的PostScript 文件偏移量为X 方向上 0.75 英寸, y 方向上 5 英寸。这就将图形输出到页面的上半部分。因此,非常容易就看出偏移量是基于页面的左下角计算出来。(见图 78。 )键入下列语句就可以看出缺省的偏移量:图 76:纵向和横向模式下窗口的尺寸和偏移量。注意,在横向模式下,整个页面被旋转了90 度,并且偏移量(不是窗口尺寸)也随着一起旋转。IDL thisDevice = !D.Name IDL Set_P lot, PSIDL Help, /Device IDL Set

19、_Plot, thisDevice 然而当把图像横向输出为时,整页已被旋转了90 度,包括页面的左下角!可以在图76中看到它们的缺省值。如果没有意识到偏移点已随页面旋转了,可能设置的偏移量会使图形超出页面。例如,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - 想要使 X 和 Y 方向的偏移量都为1 英寸,可以会这样做:Set_Plot, PSDevice, XOffset = 1.0, YOffset = 1.0, /Inch

20、es, /Landscape Plot, data 可以在图77 中看到想象中作出的图形和实际上作出的图。确信自己明白了偏移量在横向模式下是怎样工作的。图 77:如果不注意横向模式下偏移量是怎样工作的,图形将被旋转偏出页面右边。用 PS_Form配置 PostScript设备已下载的本书配套程序中有一个名为PS_Form 的程序。这个程序的目的是让用户能够交互式地决定将图形放在PostScript 输出窗口的哪里,以及设置 PostScript 设备其它的配置。可以在图78 中看到 PS_Form 的图示说明。在右上角的绘图组件内的黄色方框代表PostScript 页面。黄色框内的绿色框是Po

21、stScript页面上输出窗口的位置。用鼠标左键沿在页面内移动绿色方框。用鼠标右键画一个新的绿色框。当设置好之后, 点 Accept 按钮。PS_From将返回一个结构, 此结构里面的字段都是Device命令的有效关键字。如下PS_Form 被用来画一个简单图形的例子。deviceKeywords = PS_Form (Cancel = canceled) If canceled NE 1 THEN Begin currentDevice = !D.Name Set_Plot, PSDevice, _Extra = deviceKeywords Plot, LoadData (1) Devic

22、e, /Close_File Set_Plot, currentDevice ENDIF 注意 PS_Form 的一个好特点是,当设备被设置为横向时,用户不必考虑偏移量的旋转问题。对用户来说,偏移量好像总是基于左下角算出来的。PS_Form 另一个好特点是,它可以记住上次设置。例如,像下面这样调用PS_Form,并更改它的配置。结束以后点Accept 按钮。IDL setup = PS_Form () 要看设置的内容,键入:IDL Help, setup, /Structure 要用刚才的设置内容来启动PS_Form,键入:IDL newSetup = PS_Form (Defaults =

23、setup) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - 要看 PS_Form 是如何被应用的,可以试着调用XWindow程序,它也是下载的本书配套程序之一。 XWindow是一个“智能化”的图形窗口,它可以自我调整大小,可以载入只用于它自己的色彩表,也可以将它的输出送到PostScript 文件中。可以这样来调用它:IDL XW indow, Shade_surf , LoadData(2), /Output, /XCo

24、lors 尝试用 XWindow程序将窗口里面的内容制作成一个PostScript 文件。这本书余下的大部分内容将讨论如何编写一个类似于Xwindows 的程序。配置和使用打印设备打印设备在IDL5.0 中被引入介绍, 最初不像其它图形输出设备能用Device 命令来配置。Dialog_PrinterSetup 命令是用来存取计算机上缺省打印机的配置参数。解释默认打印机如何安装和配置已经远远超出了本书要讨论的范围,但一般来说, 打印机配置对话框提供了较多配置打印机自身的选项,但对于如何定位图形输出的选择相对较少。比如说,PostScript 设备。为了让用户在打印设备上有更多的选项来松定位图形

25、输出,Research Systems 公司在IDL5.1.1 中为 Printer 设备引入了Device 关键字。 (注意,这些关键字仅适用于当向打印机发送直接图形命令时。 )这些关键字XSize,YSize,XOffset 和 YOffset 和其它硬拷贝输出设备中同名关键字很象,尽管不完全是。下面将指出它们的一些不同之处。图 78: 弹出式组件程序PS_Form 。 这个程序为用户配置PostScript 设备提供了交互式方法。此图为如何配置PostScript 设备来生成本书的大部分图形。要存取默认打印机的配置,键入:IDL ok = Dialog_PrinterSetup () 此

26、对话框在Windows NT 上如图 79 所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - 图 79:在 Windows NT 机器上的Dialog_PrinterSetup的对话框在使用打印设备时,重要的是要知道,只有关键字Close_Document 被用于 Device 命令时,输出内容才会被送到打印机上。例如, 生成一幅线画图命令的正确顺序类似于下面的代码。关闭打印机文档是必须的。如果忘了这条代码,不会输出任何东

27、西。由于下面的代码中有一个 IF 循环,所以下面的代码必须放在一个文本编辑器中编辑,就像一个IDL 主程序一样。将文件存为sendprinter.pro。可以在下载的程序中找到这个程序。data = LoadData(1) ok = Dialog_PrinterSetup() IF ok THEN BEGIN thisDevice = !D.Name Set_Plot, PRINTER Plot, data Device, /Close_Document Set_Plot, thisDevice ENDIF END 如果想运行这个主程序并且把结果输出到默认打印机上,可以这样做:IDL. Run

28、 sendprinter 用打印设备定位图形在 Printer 设备的第一版中,当将图形输出到默认打印机时,输出的图形常常充满了整页纸, 常常看起来什么根本不象显示设备上的图形。实际上, 不能控制将图形放在打印机的什么位置。例如,图像按设备精度打印时,其左下角位于页面的左下角。一个256 乘 256的图像用600 dpi 的像素分辨率打印到一个PostScript 打印机上时,经常只有0.5 平方英寸,除非应用了合适的比例放大因子。像素在 PostScript 设备上, 不会按比例地缩放到纸上。TV或 TVscl 命令中的 XSize 和 YSize 关键字当它们用于PostScript 时同

29、样不能缩放像素。 (例子见 71 页的“在 PostScript 设备上改变图像尺寸” )这一点在IDL5.1.1 种作了改进,对Device 命令增加了关键字,可以和Printer 设备一起被用来定位图形在纸上的位置和比例。像在PostScript 设备中的同名关键字一样,Printer 设名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - 备的关键字默认时用厘米单位。(也可以设为英寸,如果Inches 关键字被使用的话。 )在

30、纵向输出模式下,XSize, YSize, XOffset和 YOffset 的默认值是(用英寸) :XOffset: 0.75 inches YOffset: 5.0 inches XSize: 7.0 inches YSize: 5.0 inches 在横向输出模式中,默认值为:XOffset: 0.75 inches YOffset: 0.75 inches XSize: 9.5 inches YSize: 7.0 inches 读者立即会发现这些缺省值在Printer 设备上和在PostScript 设备上给出了相同的相对输出尺寸。但是也要注意,偏移量常常从页面的左下角计算出来。这是显

31、而易见的,但是横向模式下 PostScript 偏移量不是这样计算的(见 199 页的“在横向输出模式中计算PostScript的偏移量”) 。就意味着在编写一个既能创建PostScript 文件又能将图形显示直接送到打印机的程序时,要格外注意横向模式下的偏移量。为了帮助读者正确地计算这些关键字的值,Research Systems公司同时为Device 命令引入了 Get_Page_Size 关键字,它可以用来返回一个包含打印设备页面的X 方向尺寸和Y 方向尺寸的两维矢量。奇怪的是, 只能用设备坐标返回页面的尺寸,尽管页面和偏移量的关键词是用英寸或厘米来表示。因此,要想在页面上获得精确的输出

32、结果,必须做些计算。例如,如果想让一个图形在输出时占页面的80%,也可以键入这些命令:IDL thisDevice =!D.Name IDL Set_Pl ot, PRINTER IDL Device, Get_Page_Size = myPage IDL Device, XSize = myPage0*0.8, XOffset = myPage0*0.1, $ YSize = myPage1*0.8, YOffset = myPage 1*0.1, /Device IDL Plot, Findgen (11) IDL Device, /Close_Document IDL Set_Plot,

33、 thisDevice 用打印设备输出图像向 Printer 设备输出一张图像稍不同于PS设备向 PostScript 文件输出一张图像(见193页的“问题: PostScript 设备显示图像时的不同”。 )主要区别在于通过Printer 设备输出的图像没有保持纵横比,而用PostScript 设备输出时却保留了。但是,和PostScript 设备一样,Printer 设备也能在TV 或 TVScl 命令中用XSize,YSize 关键字来恰当的改变图像的尺寸。图像的偏移量可以用Device 命令中的关键字Xoffset ,YOffset 关键字来设置。例如,假设想在页面的中间放一个常规的图

34、像,在页面上的纵横比为2/3,可以键入下面这些命令:IDL thisDevice =!D.Name IDL Set_Plot, PRINTER IDL Device, XOffset = 1.25, YOffset = 3.5, /Inches IDL image = LoadData (7) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - IDL TV, image, XSize = 6, YSize = 4, /Inches IDL Device, /Close_Document IDL Set_Plot, thisDevice 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com