張穎
摘 要:利用Delphi和VS這兩種開(kāi)發(fā)平臺(tái),結(jié)合Oracle數(shù)據(jù)庫(kù),實(shí)現(xiàn)膠片排版、膠片調(diào)整、虛擬打印,自助打印、系統(tǒng)管理等功能。重點(diǎn)介紹了系統(tǒng)開(kāi)發(fā)過(guò)程中針對(duì)特殊問(wèn)題采用的幾種技術(shù)。目的是完成膠片的集中打印管理,膠片存儲(chǔ)備份,減少開(kāi)支。
關(guān)鍵詞:Delphi;PACS;C/S;膠片虛擬打印
中圖分類(lèi)號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
在美國(guó),擁有許多醫(yī)療影像診斷與Internet相結(jié)合的PACS系統(tǒng)(Picture Archiving and Communication Systems),隨著網(wǎng)絡(luò)IT技術(shù)的發(fā)展,實(shí)現(xiàn)了真正意義的遠(yuǎn)程會(huì)診,并將實(shí)現(xiàn)無(wú)膠片化。在歐洲,PACS與醫(yī)院信息系統(tǒng)融合,形成日趨爆炸的醫(yī)學(xué)信息網(wǎng),并產(chǎn)生了越來(lái)越多的應(yīng)用方向。在亞洲一些發(fā)達(dá)國(guó)家,如日本、韓國(guó)、我國(guó)臺(tái)灣地區(qū),經(jīng)過(guò)十幾年的發(fā)展,特別是一些國(guó)家的政府大力扶持之下,PACS系統(tǒng)已經(jīng)實(shí)用化。由于我國(guó)開(kāi)發(fā)和引進(jìn)PACS系統(tǒng)較晚,目前已經(jīng)建立并有效運(yùn)行的PACS系統(tǒng)并不多見(jiàn)。究其原因主要是標(biāo)準(zhǔn)化程度低、兼容性差、一般為封閉式的專(zhuān)用系統(tǒng),既不經(jīng)濟(jì)、價(jià)格也昂貴,配置的硬件合理,對(duì)工作量大的醫(yī)院缺乏強(qiáng)大的存儲(chǔ)子系統(tǒng),無(wú)法支持?jǐn)?shù)量巨大的常規(guī)放射影像,因此不能真正實(shí)現(xiàn)無(wú)片化管理?,F(xiàn)有的PACS系統(tǒng)設(shè)計(jì)大多數(shù)沒(méi)有考慮技術(shù)發(fā)展和擴(kuò)展需要的可能,難以與現(xiàn)有的HIS/RIS整合為一個(gè)系統(tǒng)[1]。
2 虛擬膠片打印系統(tǒng)功能(The capability of virtual
film printing system)
系統(tǒng)主要實(shí)現(xiàn)膠片排版、膠片調(diào)整、虛擬打印、自助打印、系統(tǒng)管理等功能。目的是完成膠片的集中打印管理,膠片存儲(chǔ)備份,減少開(kāi)支。普通PC機(jī)上達(dá)到或者接近設(shè)備工作站的處理速度;采用大數(shù)據(jù)量壓縮算法盡量減少存儲(chǔ)空間需求;解決膠片打印的虛擬化技術(shù)。
3 關(guān)鍵技術(shù)(The key technologies)
實(shí)現(xiàn)以上功能要解決的關(guān)鍵技術(shù)有數(shù)據(jù)壓縮技術(shù),數(shù)據(jù)傳輸技術(shù),共享內(nèi)存技術(shù),大數(shù)據(jù)量下的數(shù)據(jù)處理技術(shù),與三方RIS系統(tǒng)接口技術(shù)等等。
3.1 數(shù)據(jù)庫(kù)技術(shù)介紹(The database technology)
不一樣的數(shù)據(jù)庫(kù)有不一樣的特征,有自己的適用場(chǎng)合,Access用于小型系統(tǒng);My SQL用于中小型系統(tǒng);SQL server用于中型系統(tǒng);Oracle用于大型系統(tǒng);Db2用于大中小型系統(tǒng)。本系統(tǒng)采用Oracle數(shù)據(jù)庫(kù)。
Oracle數(shù)據(jù)庫(kù)產(chǎn)品是當(dāng)前數(shù)據(jù)庫(kù)技術(shù)的典型代表,Oracle的產(chǎn)品除了數(shù)據(jù)庫(kù)系統(tǒng)外,還有應(yīng)用系統(tǒng)和開(kāi)發(fā)工具等。目前的Oracle 9是一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫(kù)系統(tǒng),它既非純的面向?qū)ο蟮臄?shù)據(jù)庫(kù)也非純的關(guān)系數(shù)據(jù)庫(kù),而是兩者的結(jié)合,因此叫做“對(duì)象關(guān)系數(shù)據(jù)庫(kù)”[2]。
3.2 共享內(nèi)存技術(shù)介紹(The shared memory technology)
內(nèi)存映射文件的原理是,先保留一段虛擬內(nèi)存空間,再將磁盤(pán)文件提交給這段內(nèi)存空間,并且返回一個(gè)指向這段內(nèi)存空間的指針,就可以訪問(wèn)文件的內(nèi)容了。
使用內(nèi)存映射文件的好處:可以實(shí)現(xiàn)不同進(jìn)程間共享文件或共享內(nèi)存區(qū)域中的數(shù)據(jù);可訪問(wèn)映射文件的數(shù)據(jù),并簡(jiǎn)化對(duì)文件訪問(wèn)的操作。內(nèi)存映射文件的使用步驟:
Step1:創(chuàng)建或打開(kāi)一個(gè)磁盤(pán)文件,調(diào)用FileCreate()或FileOpen()函數(shù)。
Step2:創(chuàng)建或打開(kāi)內(nèi)存映射文件對(duì)象,調(diào)用CreateFileMapping()或OpenFileMapping()函數(shù)。
Step3:將磁盤(pán)文件的視圖映射到進(jìn)程的地址空間中,調(diào)用MapViewOfFile()函數(shù)。
Step4:取消文件視圖的映射,調(diào)用UnmapView
OfFile()。
Step5:關(guān)閉文件映射和文件,調(diào)用CloseHandle()和CloseFile()分別關(guān)閉文件映射和文件。
3.3 使用TIdFtp控件實(shí)現(xiàn)膠片的上傳和下載(Use the
IIdFtp control to achieve film upload and download)
系統(tǒng)在上傳和下載膠片時(shí),采用FTP傳輸。Delphi中使用TIdFtp控件實(shí)現(xiàn)文件的下載:指定Put的AAppend:=True。TIdFtp的網(wǎng)絡(luò)操作大部分是阻塞模式的。這樣在上述操作運(yùn)行的時(shí)候用戶(hù)界面被暫時(shí)凍結(jié),必須要等待調(diào)用返回才能繼續(xù)用戶(hù)操作界面響應(yīng)。所以在實(shí)際編程中,需要使用多線(xiàn)程的方式來(lái)保證用戶(hù)界面的響應(yīng)。Windows系統(tǒng)可以使用CreateThread系統(tǒng)調(diào)用來(lái)創(chuàng)建線(xiàn)程,但是在使用的時(shí)候需要開(kāi)發(fā)人員做很多額外的工作來(lái)保證線(xiàn)程的同步等問(wèn)題。Indy中包含了實(shí)現(xiàn)多線(xiàn)程的控件TIdThreadComponent,該控件實(shí)現(xiàn)多線(xiàn)程時(shí)更加方便,也更容易控制。
3.4 通過(guò)VS編譯DCMTK(Compiled DCMTK by VS)
DCMTK(Digital Imaging and Communications in Medicine醫(yī)學(xué)數(shù)字成像和通信)是一個(gè)開(kāi)放程序代碼的DICOMToolkit,是目前最廣為應(yīng)用的處理DICOM影像的工具包[3]。要使用該工具包則需要對(duì)其進(jìn)行編譯,得到我們需要的庫(kù)文件.lib,然后再和頭文件一起加入到我們的工程中進(jìn)行使用。在程序中使用編譯的函數(shù)庫(kù),主要是要把.h和.lib文件加入到工程中。對(duì)于源碼來(lái)說(shuō).h文件都相同,而.lib文件一般來(lái)說(shuō)會(huì)有debug版本和release版本,不同的版本只是在對(duì)源碼進(jìn)行編譯時(shí),選擇的編譯模式不同。
第一,準(zhǔn)備工作。下載編譯的源文件和工具及支持工具包,下載編譯工具Cmake。在任意盤(pán),新建文件夾DCMTK,將下載文件均放到該文件夾并解壓到當(dāng)前文件夾;然后新建三個(gè)文件夾分別叫bin、lib和support。把支持庫(kù)的文件夾都移到support中,而bin和lib用來(lái)放編譯結(jié)果。endprint
第二,向VS2005安裝目錄中添加支持庫(kù)文件。在support文件夾中搜索include,將搜索到的所有文件全部復(fù)制到vs2005的VC目錄中;將xinclude.移到D:/ProgramFiles/MicrosoftVisualStudio8/VC/include中。同樣搜索*_d.lib文件,將其添加到D:/ProgramFiles/MicrosoftVisualStudio8/VC/lib文件夾中,文件名中去掉_d(若編譯release版本,則搜索*_o.lib文件,復(fù)制到D:/ProgramFiles/MicrosoftVisualStudio8/VC/lib文件夾,再去除_o)。接著搜索bin,將搜索結(jié)果放到D:/ProgramFiles/MicrosoftVisualStudio8/VC/bin。
第三,CMAKE工具的使用。首先,更改編譯標(biāo)志。打開(kāi)C:/DCMTK/cmake-2.6.0-win32-x86/bin中的cmake-gui.exe程序,設(shè)定編譯的源代碼路徑和輸出路徑,在此選擇C:/DCMTK/dcmtk-3.5;勾選“showadvanceentries”,然后將編譯的開(kāi)關(guān)設(shè)置為MT,默認(rèn)的為MD,注:MT、MD是決定庫(kù)文件的引用方法,在VS2005的MFC程序中,項(xiàng)目->屬性—>配置屬性->常規(guī)中,“MFC的使用”項(xiàng)中選擇“共享的DLL中使用MFC”時(shí)才選擇MD,其他兩種情況選擇MT。在使用Cmake是一定要保證:C:/DCMTK/dcmtk-3.5.4文件夾中的CMakeLists.txt中,CMAKE程序的編譯開(kāi)關(guān),VS2005中項(xiàng)目程序中的MT、MD標(biāo)志一致。然后,勾選全部支持庫(kù),并且找到EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH分別設(shè)為C:/DCMTK/bin和C:/DCMTK/lib,這樣最后編譯出來(lái)的lib文件和exe文件就在這兩個(gè)文件夾中,勾選支持庫(kù)和設(shè)置輸出目。最后,點(diǎn)擊Configure,選擇當(dāng)前編譯器。然后點(diǎn)擊Genarate,生成DCMTK的項(xiàng)目文件。此時(shí)會(huì)出現(xiàn)紅色警告。讓你在某個(gè)目錄下的Cmakelist.txt文件中的ADD_EXECUTABLE(${PROGRAM}${PROGRAM})行前添加:
if(COMMANDcmake_policy)
cmake_policy(SETCMP0003NEW)
endif(COMMANDcmake_policy)
這是由于DCMTK3.5.4是對(duì)Cmake2.4版本的使用,使用高于2.6.0的Cmake進(jìn)行編譯金輝出現(xiàn)此警告,在其彈出的指定文件夾中的cmakelist文件中相應(yīng)的位置,添加要求添加的語(yǔ)句即可。
第四,在VS2005中進(jìn)行編譯。首先,編譯ALL_BUILD。進(jìn)入C:/DCMTK/dcmtk-3.5.4目錄,雙擊dcmtk.sln文件,在打開(kāi)的項(xiàng)目中,從主選單中選“生成”-“批生成”,在彈出的對(duì)話(huà)盒中勾選“ALL_BUILD”的DEBUG方案,并按下“生成”。然后,編譯INSTALL。主選單中選“生成”-“批生成”,在彈出的對(duì)話(huà)盒中勾選“INSTALL”的DEBUG方案,并按下“生成”。
第五,VS2005中使用DCMTK。這里主要介紹DEBUG版本的DCMTK庫(kù)在VS2005中的應(yīng)用。DCMTK的支持庫(kù)已經(jīng)加入VS2005的內(nèi)置庫(kù)中,現(xiàn)在只需要添加DCMTK的庫(kù)即可。(1)頭文件的安放:如同支持庫(kù)文件的添加方法一樣,在C:/DCMTK/dcmtk-3.5.4中搜索Include然后將搜索結(jié)果放入到VS2005中VC目錄下Include中。(2)庫(kù)文件的安放:新建一個(gè)MFC工程,再將C:/DCMTK/lib文件夾中.lib文件放入工程文件夾中,然后在stdafx.h中添加如下代碼:
#pragmacomment(lib,"netapi32.lib")
#pragmacomment(lib,"wsock32.lib")
#pragmacomment(lib,"ofstd.lib")
#pragmacomment(lib,"dcmdata.lib")
#pragmacomment(lib,"dcmimgle.lib")
#pragmacomment(lib,"dcmimage.lib")
#pragmacomment(lib,"ijg8.lib")
#pragmacomment(lib,"ijg12.lib")
#pragmacomment(lib,"ijg16.lib")
#pragmacomment(lib,"dcmjpeg.lib")
#pragmacomment(lib,"dcmnet.lib")
#pragmacomment(lib,"dcmdsig.lib")
#pragmacomment(lib,"dcmsr.lib")
#pragmacomment(lib,"dcmtls.lib")
#pragmacomment(lib,"dcmpstat.lib")
#pragmacomment(lib,"dcmwlm.lib")
#pragmacomment(lib,"dcmqrdb.lib")
#pragmacomment(lib,"dcmtkeay.lib")
#pragmacomment(lib,"dcmtkssl.lib")
#pragmacomment(lib,"iconv.lib")
#pragmacomment(lib,"libtiff.lib")
#pragmacomment(lib,"libpng.lib")
#pragmacomment(lib,"libxml2.lib")
#pragmacomment(lib,"zlib.lib")
這樣就可以在工程中使用DCMTK了。如果要改為release版本,則需要將DCMTK的支持庫(kù)、庫(kù)文件的.lib文件更換掉。
第六,涉及的外部接口。硬件接口:(1)條碼掃描槍掃描一維條形碼將識(shí)別的號(hào)碼錄入系統(tǒng)。(2)讀卡器通過(guò)刷IC卡將病人卡號(hào)等基本信息錄入系統(tǒng)。軟件接口:(1)膠片打印通過(guò)共享內(nèi)存的方式調(diào)用FilmSend.exe程序進(jìn)行膠片打印。(2)報(bào)告打印通過(guò)socket套接字的方式調(diào)用AutoPrintReport.exe程序進(jìn)行報(bào)告打印。
4 結(jié)論(Conclusion)
在經(jīng)過(guò)模塊的測(cè)試后,膠片排版可按指定布局進(jìn)行排列,已經(jīng)能夠證實(shí)該軟件排版功能已基本達(dá)到要求,調(diào)試功能能夠?qū)崿F(xiàn),但是穩(wěn)定性還有待加強(qiáng);系統(tǒng)設(shè)置功能也得以實(shí)現(xiàn)。需進(jìn)一步加強(qiáng)該系統(tǒng)的傳輸速度及穩(wěn)定性。
參考文獻(xiàn)(References)
[1] 李國(guó)強(qiáng).PACS系統(tǒng)及構(gòu)建醫(yī)院PACS中存在的問(wèn)題[J].實(shí)用醫(yī)
技雜志,2006,13(16):2853-2854.
[2] 張曉林,吳斌,晁陽(yáng).Oracle數(shù)據(jù)庫(kù)開(kāi)發(fā)基礎(chǔ)教程[M].北京:清華
大學(xué)出版社,2009.
[3] 王偉蔚,等.基于DICOM文本與內(nèi)容的醫(yī)學(xué)圖像檢索系統(tǒng)研
究[J].計(jì)算機(jī)工程與設(shè)計(jì).2011,32(3):1014-1018.
作者簡(jiǎn)介:
張 穎(1981-),女,碩士,助理實(shí)驗(yàn)師.研究領(lǐng)域:計(jì)算機(jī)應(yīng)
用,軟件工程.endprint