劉瑤 孫華峰 江兆銀 王睿
揚(yáng)州市職業(yè)大學(xué)信息工程學(xué)院,江蘇 揚(yáng)州 225009
基于CodeGear Delphi的面向安防的矢量電子地圖技術(shù)研究
劉瑤 孫華峰 江兆銀 王睿
揚(yáng)州市職業(yè)大學(xué)信息工程學(xué)院,江蘇 揚(yáng)州 225009
闡述了矢量電子圖的特點(diǎn)及其應(yīng)用要點(diǎn);對(duì)CodeGear Delphi實(shí)現(xiàn)矢量圖的技術(shù)給予了詳細(xì)的介紹;并且結(jié)合實(shí)例進(jìn)行了分析研究。
CodeGear;矢量圖;安防
現(xiàn)代生活對(duì)安全防范的要求越來越高,高效快捷的安防監(jiān)控范系統(tǒng)成為唯一的選擇。作為安全防范系統(tǒng)的“大腦”,中央控制軟件大多采用了電子地圖來方便直觀地顯示現(xiàn)場(chǎng)的情況以及設(shè)備的安放位置。然而,大多數(shù)該類軟件采用了JPG或位圖圖片的方式來完成,這種方式造成了很多問題,如:轉(zhuǎn)換麻煩,大多數(shù)的工程平面圖采用AUTOCAD繪制,若轉(zhuǎn)成位圖很不方便;同時(shí)這種方式也帶來不能放大、縮小等問題,隨著放大、縮小,圖片將變得無法使用。因此在安全防范系統(tǒng)中采用矢量圖是十分必要的,本文詳細(xì)地闡述了矢量圖技術(shù)在安防監(jiān)控系統(tǒng)中的設(shè)計(jì)和實(shí)現(xiàn)。
矢量圖形是計(jì)算機(jī)圖形學(xué)中用點(diǎn)、直線或者多邊形等基于數(shù)學(xué)方程的幾何圖元表示圖像。矢量圖形與位圖使用顏色質(zhì)量表示圖像的方法有所不同。因此矢量圖在處理需放大,縮小這些應(yīng)用時(shí)具有位圖所沒有的能力。
這種繪制圖比位圖的優(yōu)越之處有:
(1)保存最少的信息,文件大小比位圖要小,并且文件大小與物體的大小無關(guān)。
(2)可以無限地放大圓,它仍然保持平滑;用多邊形表示的曲線將會(huì)顯現(xiàn)出不是真正的曲線。
(3)在放大的時(shí)候,直線與曲線都不會(huì)成比例地變粗,它只會(huì)保持不變或者要小于縮放比例;為了看起來比較平滑,使用簡單幾何形狀表示的不規(guī)則曲線將會(huì)成比例地變粗,并且看起來不再像這些幾何形狀。
(4)保存的物體參數(shù)可以在后面修改。即物體的運(yùn)動(dòng)、縮放、旋轉(zhuǎn)、填充等都不會(huì)降低繪制的精度。另外,可以用與設(shè)備無關(guān)的單位表示,這樣更好地在柵格設(shè)備上進(jìn)行柵格化。
(5)從三維的視角來看,由于陰影可以抽象為形成它們的光線,所以矢量圖形的陰影渲染更加真實(shí)。這樣就可以得到真實(shí)感的圖像及渲染效果。
由于目前工程繪制的平面圖主要采用美國Autodesk公司開發(fā)的自動(dòng)計(jì)算機(jī)輔助設(shè)計(jì)軟件AUTOCAD完成的,其采用的格式.dwg 成為二維繪圖的標(biāo)準(zhǔn)格式,但是由于版權(quán)等原因,本文描述中的矢量圖采用微軟所定制的WMF 格式。
DWG 格式可方便地在AUTOCAD中輸出成為WMF格式。
Delphi以Tmetafile對(duì)象對(duì)Win32增強(qiáng)型圖元文件進(jìn)行了封裝,通過設(shè)置Enhanced屬性可以設(shè)定圖元文件是以標(biāo)準(zhǔn)型或可增強(qiáng)型格式存儲(chǔ)。
在DELPHI中調(diào)用及顯示圖元文件的基本步驟:
(1)創(chuàng)建一個(gè)TMetaFile 的實(shí)例;
(2)創(chuàng)建或者調(diào)取圖元文件;
(3)在內(nèi)存中創(chuàng)建一個(gè)畫布,并將圖元文件繪制在該畫布上;
(4)在用戶界面創(chuàng)建一個(gè)顯示區(qū)域,并放置顯示控件(如:Timage);
(5)采用直接映射方式將內(nèi)存中畫布的內(nèi)用映射到顯示界面上。
(1)創(chuàng)建TMetaFile 的實(shí)例
在這里定義了一個(gè)Fwfm的全局變量用于保存。
(2)調(diào)取圖元文件
EMapCtrl_GetEMapActualRect(aRect),用于取得所繪制圖形的實(shí)際矩形尺寸。
(3)在實(shí)際調(diào)取圖元文件過程中,圖元文件原始的大小和比例是十分重要的。所調(diào)取得的圖元文件的大小、寬高的比例是核心點(diǎn)。
采用_EMapCtrl_GetEMapActualRect的函數(shù)完成該功能。其基本原理是在內(nèi)存中創(chuàng)建一個(gè)畫布(直接利用了TBitmap中的畫布),并給該畫布涂滿特殊的顏色(Red),在畫布上繪制圖元文件。利用掃描函數(shù)從(0,0)掃描整個(gè)畫布直到發(fā)現(xiàn)不同于特殊色(Red)的點(diǎn),記錄該點(diǎn),該點(diǎn)就是真實(shí)的圖像開始的左上點(diǎn);同理可得到右下點(diǎn)。
(4)滿畫布顯示圖元文件
通過上述的_EMapCtrl_GetEMapActualRect函數(shù)得到實(shí)際圖形矩形FActualRect,再通過偏移和計(jì)算得出繪制尺寸,利用CANVAS的StretchDraw方法。
(5)按指定點(diǎn)進(jìn)行縮放
在實(shí)際安防監(jiān)控系統(tǒng)中常需電子地圖按照某個(gè)指定的點(diǎn)為中心進(jìn)行放大或者縮小。其實(shí)現(xiàn)思路為:首先將該點(diǎn)坐標(biāo)轉(zhuǎn)化成原始圖形中的坐標(biāo)。
function_EMapCtrl_ChangeNowToPos
計(jì)算縮放前后位移的距離,這個(gè)距離將在地圖顯示時(shí)進(jìn)行偏移,以確保顯示后點(diǎn)擊的點(diǎn)顯示在原位。
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)顯示圖形
在進(jìn)行移動(dòng)、縮放等操作時(shí),往往會(huì)造成圖像的閃爍。解決的技術(shù)為:先在內(nèi)存中建立一個(gè)畫布,并且在其上完成了繪制,當(dāng)繪制完成時(shí)直接將該畫布映射至顯示界面,這樣可以大幅減少界面響應(yīng)。
Bitblt(Canvas.Handle, 0, 0,Width, Height, aCanvas.Handle,0,0,SRCCopy);
利用CodeGear Delphi的操作能力,可完成幾乎所有的關(guān)于安全防范監(jiān)控系統(tǒng)中電子地圖操作所需的功能,并結(jié)合Delphi強(qiáng)大的底層操作,相信不難實(shí)現(xiàn)一款完善的應(yīng)用。上述所有代碼在Win Vista,CodeGear Delphi上運(yùn)行通過。
[1]梁冰,李鐘尉.Delphi技術(shù)方案寶典[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年江蘇省高等學(xué)校實(shí)踐創(chuàng)新訓(xùn)練計(jì)劃立項(xiàng)項(xiàng)目(高職高專類618)
劉瑤(1976-),女,江蘇揚(yáng)州人,講師,工學(xué)碩士,研究方向:計(jì)算機(jī)應(yīng)用與嵌入式。孫華峰(1954-),男,江蘇揚(yáng)州人,副教授,揚(yáng)州職業(yè)大學(xué)信息工程學(xué)院院長。