×

【翻译】GDI+系列教程(三):GDI+中的坐标系(VB.NET)

Kalet Kalet 发表于2009-03-20 12:00:13 浏览328 评论0

抢沙发发表评论

在大部分的图像系统中,元素的位置都是通过X,Y坐标表示的。一对坐标有两个数字组成,他们分别代表从左到右和从上到下的距离。例如,我们可以使用下面的语句来绘制一条直线:

 g.DrawLine(Pens.Black,0,0,100,200);

后四个参数就是坐标,代表从0,0到100,200绘制两点之间绘制直线,结果如图1:


【翻译】GDI+系列教程(三):GDI+中的坐标系(VB.NET)


默认情况下,GDI+中使用的坐标是指像素点的位置,不过GDI+是一个独立于绘图系统的解决方案。也就是说,你可以直接使用像素点或真实世界中的英寸、毫米等单位。


和整数说再见


许多图像系统,尤其是一些老的Windows GDI,使用整数值作为坐标。这样就意味着你不能表示通过1.5来表示1.5个英寸。不过,GDI+已经不是这样了,这里的坐标是浮点表示。也就是说,如果你想实现CAD绘图程序并显示精确的英寸或毫米大小,你就可以直接使用GDI+。


坐标系控件


 在GDI+中有三个分开的坐标系空间:
1. World coordinate space. 它是图像系统中的二维空间。World coordinate是通过两个浮点表示的抽象值。基本上,你绘制任何东西最终都会转换到这个空间。


2. Page Coordinate Space. 该空间用来对应真实世界的尺度。你可以设定Page Coordinate来代表点、英寸、毫米等等。这就是GDI+是个独立的解决方案的来源。你可以设置使用的PageUnit,调整PageScale来达到这一点.


3. Device Coordinate Space.这个空间有系统控制,转换你在Page空间中的坐标到屏幕、打印机可以使用的空间。也许你的屏幕、你的打印机的分辨率不一样,那么同样一英寸可能在设备上显示不一样多的点。


Real-world values.


在Page空间中,允许的真正现实世界中的标准有:



1. Pixel. World space中的一个单元,代表中屏幕或打印机上的一个点。它是PageUnit的默认值。


2. Millimeter.


3. Inch.


4. Point. 1/72英寸。


5. Display. 1/75英寸,从CRT显示器延续而来。


6. Document. 1/300英寸,从激光打印机延续而来。


7. World. 看似应该和Pixel一样,不过经常出错。



下面的演示程序(图2)向你展示了,如何在你的程序中使用现实世界的坐标。



图2 现实世界中的绘图系统

【翻译】GDI+系列教程(三):GDI+中的坐标系(VB.NET)

相关代码如下:

Private Sub DrawRectangles(ByVal g As Graphics)
g.PageUnit = GraphicsUnit.Pixel
Dim p As New Pen(Color.Black, 3) 'this pen will be 3 pixels wide

g.DrawRectangle(p, 10, 10, 200, 100) 'draw a rectangle in Pixel mode (the default)

p.Dispose()

g.PageUnit = GraphicsUnit.Inch
p = New Pen(Color.Blue, 0.05F) 'this pen will be 1/20th of an inch wide

g.DrawRectangle(p, 0.1F, 1.5F, 4.0F, 1.0F) ' draw a rectangle 4" by 1"

p.Dispose()

g.PageUnit = GraphicsUnit.Millimeter
p = New Pen(Color.Green, 1.0F) 'this pen will be 1 millimeter wide

g.DrawRectangle(p, 4.0F, 80.0F, 80.0F, 60.0F) ' draw a rectangle 80 by 60 mm

p.Dispose()
End Sub 'DrawRectangles
【翻译】GDI+系列教程(三):GDI+中的坐标系(VB.NET)

详细代码见本文附件中的实例。



群贤毕至

访客