基于CodeGear Delphi的面向安防的矢量电子地图技术研究
2011-10-17刘瑶孙华峰江兆银王睿
刘瑶 孙华峰 江兆银 王睿
扬州市职业大学信息工程学院,江苏 扬州 225009
基于CodeGear Delphi的面向安防的矢量电子地图技术研究
刘瑶 孙华峰 江兆银 王睿
扬州市职业大学信息工程学院,江苏 扬州 225009
阐述了矢量电子图的特点及其应用要点;对CodeGear Delphi实现矢量图的技术给予了详细的介绍;并且结合实例进行了分析研究。
CodeGear;矢量图;安防
引言
现代生活对安全防范的要求越来越高,高效快捷的安防监控范系统成为唯一的选择。作为安全防范系统的“大脑”,中央控制软件大多采用了电子地图来方便直观地显示现场的情况以及设备的安放位置。然而,大多数该类软件采用了JPG或位图图片的方式来完成,这种方式造成了很多问题,如:转换麻烦,大多数的工程平面图采用AUTOCAD绘制,若转成位图很不方便;同时这种方式也带来不能放大、缩小等问题,随着放大、缩小,图片将变得无法使用。因此在安全防范系统中采用矢量图是十分必要的,本文详细地阐述了矢量图技术在安防监控系统中的设计和实现。
1 矢量图
矢量图形是计算机图形学中用点、直线或者多边形等基于数学方程的几何图元表示图像。矢量图形与位图使用颜色质量表示图像的方法有所不同。因此矢量图在处理需放大,缩小这些应用时具有位图所没有的能力。
这种绘制图比位图的优越之处有:
(1)保存最少的信息,文件大小比位图要小,并且文件大小与物体的大小无关。
(2)可以无限地放大圆,它仍然保持平滑;用多边形表示的曲线将会显现出不是真正的曲线。
(3)在放大的时候,直线与曲线都不会成比例地变粗,它只会保持不变或者要小于缩放比例;为了看起来比较平滑,使用简单几何形状表示的不规则曲线将会成比例地变粗,并且看起来不再像这些几何形状。
(4)保存的物体参数可以在后面修改。即物体的运动、缩放、旋转、填充等都不会降低绘制的精度。另外,可以用与设备无关的单位表示,这样更好地在栅格设备上进行栅格化。
(5)从三维的视角来看,由于阴影可以抽象为形成它们的光线,所以矢量图形的阴影渲染更加真实。这样就可以得到真实感的图像及渲染效果。
2 矢量图在安防系统中的应用可能
由于目前工程绘制的平面图主要采用美国Autodesk公司开发的自动计算机辅助设计软件AUTOCAD完成的,其采用的格式.dwg 成为二维绘图的标准格式,但是由于版权等原因,本文描述中的矢量图采用微软所定制的WMF 格式。
DWG 格式可方便地在AUTOCAD中输出成为WMF格式。
3 DELPHI中的矢量图
Delphi以Tmetafile对象对Win32增强型图元文件进行了封装,通过设置Enhanced属性可以设定图元文件是以标准型或可增强型格式存储。
在DELPHI中调用及显示图元文件的基本步骤:
(1)创建一个TMetaFile 的实例;
(2)创建或者调取图元文件;
(3)在内存中创建一个画布,并将图元文件绘制在该画布上;
(4)在用户界面创建一个显示区域,并放置显示控件(如:Timage);
(5)采用直接映射方式将内存中画布的内用映射到显示界面上。
4 用CodeGear Delphi实现安防系统中矢量电子地图的技术和实例
(1)创建TMetaFile 的实例
在这里定义了一个Fwfm的全局变量用于保存。
(2)调取图元文件
EMapCtrl_GetEMapActualRect(aRect),用于取得所绘制图形的实际矩形尺寸。
(3)在实际调取图元文件过程中,图元文件原始的大小和比例是十分重要的。所调取得的图元文件的大小、宽高的比例是核心点。
采用_EMapCtrl_GetEMapActualRect的函数完成该功能。其基本原理是在内存中创建一个画布(直接利用了TBitmap中的画布),并给该画布涂满特殊的颜色(Red),在画布上绘制图元文件。利用扫描函数从(0,0)扫描整个画布直到发现不同于特殊色(Red)的点,记录该点,该点就是真实的图像开始的左上点;同理可得到右下点。
(4)满画布显示图元文件
通过上述的_EMapCtrl_GetEMapActualRect函数得到实际图形矩形FActualRect,再通过偏移和计算得出绘制尺寸,利用CANVAS的StretchDraw方法。
(5)按指定点进行缩放
在实际安防监控系统中常需电子地图按照某个指定的点为中心进行放大或者缩小。其实现思路为:首先将该点坐标转化成原始图形中的坐标。
function_EMapCtrl_ChangeNowToPos
计算缩放前后位移的距离,这个距离将在地图显示时进行偏移,以确保显示后点击的点显示在原位。
x := p.X * FwmfZoomRate -(aZoomP.X - FwmfRect.Left);
y := p.Y * FwmfZoomRate -(aZoomP.Y - FwmfRect.Top);
缩放,并偏移电子地图。
tmpR.Left := FwmfRect.Left -round(x);
tmpR.Top := FwmfRect.Top -round(y);
tmpR.Right := round(Fwmf.Width * FwmfZoomRate) + tmpR.Left;
tmpR.Bottom := round(Fwmf.Height * FwmfZoomRate) + tmpR.Top;
FwmfRect := tmpR;
aCanvas.StretchDraw(tmpR,Fwmf);
(6)显示图形
在进行移动、缩放等操作时,往往会造成图像的闪烁。解决的技术为:先在内存中建立一个画布,并且在其上完成了绘制,当绘制完成时直接将该画布映射至显示界面,这样可以大幅减少界面响应。
Bitblt(Canvas.Handle, 0, 0,Width, Height, aCanvas.Handle,0,0,SRCCopy);
5 结束语
利用CodeGear Delphi的操作能力,可完成几乎所有的关于安全防范监控系统中电子地图操作所需的功能,并结合Delphi强大的底层操作,相信不难实现一款完善的应用。上述所有代码在Win Vista,CodeGear Delphi上运行通过。
[1]梁冰,李钟尉.Delphi技术方案宝典[M].北京:人民邮电出版社.2008
[2] Marco Cantu. Mastering Borland Delphi 2005.Berkeley: Sybex Press,2005:319-327
Research of Vector Electronic Map TechnologyBased on Security-Oriented System by CodeGear Delphi
This article describes Vector electronic map features and application points. Also it describes in details implementing skills of Vector electronic map based on CodeGear Delphi ,combined with analysis of the sample.
CodeGear; Vector electronic map; security-oriented
10.3969/j.issn.1001-8972.2011.06.023
2009年江苏省高等学校实践创新训练计划立项项目(高职高专类618)
刘瑶(1976-),女,江苏扬州人,讲师,工学硕士,研究方向:计算机应用与嵌入式。孙华峰(1954-),男,江苏扬州人,副教授,扬州职业大学信息工程学院院长。