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