IDL入门教程7下Word文件下载.docx

上传人:b****5 文档编号:20065793 上传时间:2023-01-16 格式:DOCX 页数:12 大小:159.81KB
下载 相关 举报
IDL入门教程7下Word文件下载.docx_第1页
第1页 / 共12页
IDL入门教程7下Word文件下载.docx_第2页
第2页 / 共12页
IDL入门教程7下Word文件下载.docx_第3页
第3页 / 共12页
IDL入门教程7下Word文件下载.docx_第4页
第4页 / 共12页
IDL入门教程7下Word文件下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

IDL入门教程7下Word文件下载.docx

《IDL入门教程7下Word文件下载.docx》由会员分享,可在线阅读,更多相关《IDL入门教程7下Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。

IDL入门教程7下Word文件下载.docx

image=LoadData(7)注释:

image是字节型的大小为360*360的数组

Set_Plot,‘PS’

IDL>

Device,XSize=2,Ysize=2,/Inches,/Encapsulated注释:

/Encapsulated生成封装的PostScript文件输出

PlotS,[0,1,1,0,0],[0,0,1,1,0],/Normal

TV,image

Device,/Close_File

Set_Plot,thisDevice

上述命令产生的输出如图69所示。

图69:

PostScript设备用可变的像素来使图像适应输出窗口的尺寸。

那个地址的尺寸为2*2英寸。

但是,若是输出窗口尺寸与原图像的纵横比不同时,图像将改变尺寸以保证自身的纵横比,其中有一方向将完全填满输出窗口。

例如,一样利用上述图像,那个地址的输出窗口为X方向1英寸,Y方向2英寸。

Device,XSize=1,Ysize=2,/Inches,/Encapsulated

这些命令取得的结果见图70。

注意,此图像只有1*1英寸,只填充了输出窗口的一半。

图70:

当输出窗口和原图像具有不同的纵横比时,图像将改变尺寸以维持自身的纵横比,而且其中的一个方向将充满整个输出窗口。

类似地,若是有一个2*1英寸的输出窗口,如下:

Device,XSize=2,Ysize=1,/Inches,/Encapsulated

结果见图71。

图71:

此图类似于图70,除输出窗口的X方向是Y方向的两倍外。

若是PostScript画图窗口是X方向1英寸和Y方向3英寸,那么TV命令输出的结果是1*1英寸的图像。

事实上,图像老是依照输出窗口的尺寸和原图像的纵横比来确信大小,可能会造成困难。

例如,假设有一个500*500像素的显示窗口,而且想将图像显示在400*400像素大小的窗口的中心。

更进一步假设,要在图像的周围画一外框。

可能会用以下命令在窗口中定位显示图像:

image=LoadData(7)

image=Congrid(image,400,400,/Interp)

Window,XSize=500,Ysize=500

TV,image,,,/Normal

Plot,FindGen(100),/NoData,/NoErase,$

Position=[,,,]注释:

画外框

 

若是当前图形窗口为显示设备时,能够看到图72所示的输出。

图72:

在显示设备上带边框的图像。

但如果是在PostScript设备上运行这些命令(不是用Window命令),将取得超级不一样的结果。

尤其是,图像依照输出窗口尺寸改变大小,极可能致使图像的外框的位置不对,如图73。

利用TV命令设置图像大小

设置将进入PostScript输出中的图像尺寸的正确方式是在TV命令中利用的XSize和YSize关键字。

例如,要在PostScript输出中取得与图72具有相同输出的正确方式如下:

Device,XSize=,Ysize=,/Inches,/Encapsulated

TV,image,,,XSize=,Ysize=,/Inches

Position=[,,,]

图73:

在PostScript输出中,图像的尺寸是依照输出窗口的尺寸来决定的,这可能并非用户想要的,如本图所示

图74:

在PostScript窗口中,缩放和放置图像的正确方式是利用TV命令的缩放和

定位的能力。

将此图与图73比较一下。

若是想编写一个通用的IDL程序,就象上面那个,不管窗口大小如何转变都能正常工作,不管是在显示设备上仍是在PostScript文件中,也一样能工作。

这时,或许需要计算图像在显示窗口中基于设备坐标的大小和位置。

在PostScript设备上和在显示设备上工作时,唯一的真正区别在于如何计算图像的尺寸。

程序确实是用于此目的(此程序在下载的本书配套程序中)。

PROImageAx,image,Position=position

IFN_PARAMS()EQ0THENMessage,'

Mustpassimageargument.'

IFN_ELEMENTS(position)EQ0THEN$

position=[,,,]

;

Getthesizeoftheimageinpixelunits.

s=SIZE(image)

imgXsize=s

(1)

imgYsize=s

(2)

Calculatethesizeandstartinglocationsinpixels.

xsize=(position

(2)-position(0))*!

ysize=(position(3)-position

(1))*!

xstart=position(0)*!

ystart=position

(1)*!

SizetheimagedifferentlyinPostScript.

IF!

EQ'

PS'

THEN$

TV,image,xstart,ystart,XSize=xsize,YSize=ysizeELSE$

TV,Congrid(image,xsize,ysize,/Interp),xstart,ystart

Drawtheaxesaroundtheimage.

Plot,FIndGen(100),/NoData,/NoErase,Position=position

END

打开几个不同尺寸的窗口运行该程序,输出依次显示在每一个窗口中。

注意,图像的纵横比再也不维持了。

反而,它在窗口的位置维持不变。

image=LoadData(9)

Window,XSize=400,YSize=400,/Free

ImageAx,image

Window,XSize=300,YSize=500,/Free

Window,XSize=600,YSize=300,/Free

能够运行那个程序,将输出结果传送到任何窗口,不管是显示设备仍是PostScript设备都能够。

例如,能够用下面的命令将输出送到PostScript文件中。

Device,XSize=,YSize=,/Inches,/Encapsulated

ImageAx,image,Position=[,,,]

输出结果见图75。

想以完全独立于设备的方式来显示图像,笔者偏爱用TVImage程序(已下载的本书配套程序)。

它不仅能用Position关键字按上面ImageAx的风格来在显示窗口中定位图像,同时若是情愿,还能维持图像的纵横比。

关于TVImage命令详见72页的“用归一化坐标定位图像”。

Window,XSize=600,YSize=400,/Free

TVImage,image,Position=[,,,],$

/Keep_Aspect_Ratio

图75:

在*英寸的输出窗口中运ImageAx程序。

注意,图像的纵横比再也不维持了,尽管保留了其在窗口中的位置。

在PostScript中显示图像的另一个极为重要的地址是,缺省情形下,PostScript设备对每一个图像像素只保留四位的信息。

这对16色或是灰度级的图像已经足够了。

若是想要256色,应该将关键字Bits_Per_Pixel设为8,像如此:

IDL>

Device,Bits_Per_Pixel=8,Color=1

在横向输出模式中计算PostScript的偏移量

纵向模式下的PostScript文件偏移量为X方向上英寸,y方向上5英寸。

这就将图形输出到页面的上半部份。

因此,超级容易就看出偏移量是基于页面的左下角计算出来。

(见图78。

)键入以下语句就能够够看出缺省的偏移量:

图76:

纵向和横向模式下窗口的尺寸和偏移量。

注意,在横向模式下,整个页面被逆时针旋转了90度,而且偏移量(不是窗口尺寸)也随着一路旋转。

(右图有问题吧?

thisDevice=!

Help,/Device

但是当把图像横向输出为时,整页已被旋转了90度,包括页面的左下角!

能够在图76中看到它们的缺省值。

若是没成心识到偏移点已随页面旋转了,可能设置的偏移量会使图形超出页面。

例如,想要使X和Y方向的偏移量都为1英寸,能够会如此做:

Device,XOffset=,YOffset=,/Inches,/Landscape

Plot,data

能够在图77中看到想象中作出的图形和事实上作出的图。

确信自己明白了偏移量在横向模式下是如何工作的。

图77:

若是不注意横向模式下偏移量是如何工作的,图形将被旋转偏出页面右边。

最右边的图不是如此的吧?

用PS_Form配置PostScript设备

已下载的本书配套程序中有一个名为PS_Form的程序。

那个程序的目的是让用户能够交互式地决定将图形放在PostScript输出窗口的哪里,和设置PostScript设备其它的配置。

能够在图78中看到PS_Form的图示说明。

在右上角的画图组件内的黄色方框代表PostScript页面。

黄色框内的绿色框是PostScript页面上输出窗口的位置。

用鼠标左键沿在页面内移动绿色方框。

用鼠标右键画一个新的绿色框。

当设置好以后,点Accept按钮。

PS_From将返回一个结构,此结构里面的字段都是Device命令的有效关键字。

如下PS_Form被用来画一个简单图形的例子。

deviceKeywords=PS_Form(Cancel=canceled)

IfcanceledNE1THENBegin

currentDevice=!

Device,_Extra=deviceKeywords

Plot,LoadData

(1)

Device,/Close_File

Set_Plot,currentDevice

ENDIF

注意PS_Form的一个好特点是,当设备被设置为横向时,用户没必要考虑偏移量的旋转问题。

对用户来讲,偏移量仿佛老是基于左下角算出来的。

PS_Form另一个好特点是,它能够记住上次设置。

例如,像下面如此挪用PS_Form,并更改它的配置。

终止以后点Accept按钮。

setup=PS_Form()

要看设置的内容,键入:

Help,setup,/Structure

要用适才的设置内容来启动PS_Form,键入:

newSetup=PS_Form(Defaults=setup)

要看PS_Form是如何被应用的,能够试着挪用XWindow程序,它也是下载的本书配套程序之一。

XWindow是一个“智能化”的图形窗口,它能够自我调整大小,能够载入只用于它自己的色彩表,也能够将它的输出送到PostScript文件中。

能够如此来挪用它:

XWindow,‘Shade_surf’,LoadData

(2),/Output,/XColors

尝试用XWindow程序将窗口里面的内容制作成一个PostScript文件。

这本书余下的大部份内容将讨论如何编写一个类似于Xwindows的程序。

配置和利用打印设备

打印设备在中被引入介绍,最初不像其它图形输出设备能用Device命令来配置。

Dialog_PrinterSetup命令是用来存取运算机上缺省打印机的配置参数。

说明默许打印机如何安装和配置已经远远超出了本书要讨论的范围,但一样来讲,打印机配置对话框提供了较多配置打印机自身的选项,但关于如何定位图形输出的选择相对较少。

比如说,PostScript设备。

为了让用户在打印设备上有更多的选项来松定位图形输出,ResearchSystems公司在IDL5中为Printer设备引入了Device关键字。

(注意,这些关键字仅适用于当向打印机发送直接图形命令时。

)这些关键字XSize,YSize,XOffset和YOffset和其它硬拷贝输出设备中同名关键字很象,尽管不完满是。

下面将指出它们的一些不同的地方。

图78:

弹出式组件程序PS_Form。

那个程序为用户配置PostScript设备提供了交互式方式。

此图为如何配置PostScript设备来生本钱书的大部份图形。

要存取默许打印机的配置,键入:

ok=Dialog_PrinterSetup()

此对话框在WindowsNT上如图79所示。

图79:

在WindowsNT机械上的Dialog_PrinterSetup的对话框

在利用打印设备时,重要的是要明白,只有关键字Close_Document被用于Device命令时,输出内容才会被送到打印机上。

例如,生成一幅线画图命令的正确顺序类似于下面的代码。

关闭打印机文档是必需的。

若是忘了这条代码,可不能输出任何东西。

由于下面的代码中有一个IF循环,因此下面的代码必需放在一个文本编辑器中编辑,就像一个IDL主程序一样。

将文件存为。

能够在下载的程序中找到那个程序。

data=LoadData

(1)

ok=Dialog_PrinterSetup()

IFokTHENBEGIN

Set_Plot,'

PRINTER'

Plot,data

Device,/Close_Document

ENDIF

若是想运行那个主程序而且把结果输出到默许打印机上,能够如此做:

.Runsendprinter

用打印设备定位图形

在Printer设备的第一版中,当将图形输出到默许打印机时,输出的图形常常充满了整页纸,常常看起来什么全然不象显示设备上的图形。

事实上,不能操纵将图形放在打印机的什么位置。

例如,图像按设备精度打印时,其左下角位于页面的左下角。

一个256乘256的图像用600dpi的像素分辨率打印到一个PostScript打印机上时,常常只有平方英寸,除非应用了适合的比例放大因子。

像素在PostScript设备上,可不能按比例地缩放到纸上。

TV或TVscl命令中的XSize和YSize关键字当它们用于PostScript时一样不能缩放像素。

(例子见71页的“在PostScript设备上改变图像尺寸”)

这一点在IDL5种作了改良,对Device命令增加了关键字,能够和Printer设备一路被用来定位图形在纸上的位置和比例。

像在PostScript设备中的同名关键字一样,Printer设备的关键字默许时用厘米单位。

(也能够设为英寸,若是Inches关键字被利用的话。

在纵向输出模式下,XSize,YSize,XOffset和YOffset的默许值是(用英寸):

XOffset:

inches

YOffset:

XSize:

YSize:

在横向输出模式中,默许值为:

读者当即会发觉这些缺省值在Printer设备上和在PostScript设备上给出了相同的相对输出尺寸。

可是也要注意,偏移量常常从页面的左下角计算出来。

这是显而易见的,可是横向模式下PostScript偏移量不是如此计算的(见199页的“在横向输出模式中计算PostScript的偏移量”)。

就意味着在编写一个既能创建PostScript文件又能将图形显示直接送到打印机的程序时,要额外注意横向模式下的偏移量。

为了帮忙读者正确地计算这些关键字的值,ResearchSystems公司同时为Device命令引入了Get_Page_Size关键字,它能够用来返回一个包括打印设备页面的X方向尺寸和Y方向尺寸的两维矢量。

奇怪的是,只能用设备坐标返回页面的尺寸,尽管页面和偏移量的关键词是用英寸或厘米来表示。

因此,要想在页面上取得精准的输出结果,必需做些计算。

例如,若是想让一个图形在输出时占页面的80%,也能够键入这些命令:

thisDevice=!

Set_Plot,‘PRINTER’

Device,Get_Page_Size=myPage

Device,XSize=myPage[0]*,XOffset=myPage[0]*,$

YSize=myPage[1]*,YOffset=myPage[1]*,/Device

Plot,Findgen(11)

Set_Plot,thisDevice

用打印设备输出图像

向Printer设备输出一张图像稍不同于PS设备向PostScript文件输出一张图像(见193页的“问题:

PostScript设备显示图像时的不同”。

)要紧区别在于通过Printer设备输出的图像没有维持纵横比,而用PostScript设备输出时却保留了。

可是,和PostScript设备一样,Printer设备也能在TV或TVScl命令顶用XSize,YSize关键字来适当的改变图像的尺寸。

图像的偏移量能够用Device命令中的关键字Xoffset,YOffset关键字来设置。

例如,假假想在页面的中间放一个常规的图像,在页面上的纵横比为2/3,能够键入下面这些命令:

Device,XOffset=,YOffset=,/Inches

image=LoadData(7)

TV,image,XSize=6,YSize=4,/Inches

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

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1