DICOM醫(yī)學(xué)圖像格式轉(zhuǎn)換_第1頁
DICOM醫(yī)學(xué)圖像格式轉(zhuǎn)換_第2頁
DICOM醫(yī)學(xué)圖像格式轉(zhuǎn)換_第3頁
DICOM醫(yī)學(xué)圖像格式轉(zhuǎn)換_第4頁
DICOM醫(yī)學(xué)圖像格式轉(zhuǎn)換_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

內(nèi)蒙古科技大學(xué)本科生畢業(yè)設(shè)計(jì)說明書〔畢業(yè)論文〕題目:DICOM格式醫(yī)學(xué)圖像格式解析學(xué)生姓名:劉雪霞學(xué)號(hào):2003054417專業(yè):電子信息工程班級(jí):信息2003-4班指導(dǎo)教師:呂曉琪教授摘要DICOM3.0是醫(yī)學(xué)影像存儲(chǔ)和傳輸?shù)膰?guó)際標(biāo)準(zhǔn),它標(biāo)準(zhǔn)了醫(yī)學(xué)圖像及各種數(shù)字信息在異構(gòu)系統(tǒng)和設(shè)備之間存儲(chǔ)、傳送時(shí)的文件格式和語義描述。解讀DICOM3.0的醫(yī)學(xué)圖像文件格式以及解決其顯示問題是醫(yī)學(xué)圖像處理的根底,對(duì)醫(yī)學(xué)影像技術(shù)的研究具有重要的意義。本文分析了DICOM醫(yī)學(xué)圖像的格式,在此根底上把DICOM圖像轉(zhuǎn)換為常用的BMP圖像格式,這種轉(zhuǎn)換是有意義的,可便于許多常用圖像處理工具進(jìn)行DICOM圖像的顯示。針對(duì)DICOM圖像文件存儲(chǔ)的格式編制的程序,實(shí)現(xiàn)了DICOM圖像文件的讀取顯示。由于設(shè)計(jì)時(shí)間短暫,本人水平有限,在設(shè)計(jì)完成的程序中難免有許多缺乏之處,敬請(qǐng)老師批評(píng)指正。關(guān)鍵詞:DICOM,BMP,轉(zhuǎn)換,顯示AbstractDICOM3.0istheinternationalstandardofmedicalimagesarchivingandcommunication.Itdefinestherulesofpixeldataandotherdigitalinformationwhentheyaretransferredorstoredbetweendeviceswithdifferentoperatingsystemsorofdifferentmanufacturers.AnalysisonthestorageformatofDICOM3.0medicalimagefilesanddisplayingthemisthebasisofmedicalimageprocessing.Itisveryimportantformedicalimagetechnologystudy.FirstlythisarticleanalysestheformofDICOMmedicineimages,andinthisfoundation,transformstheDICOMimageintotheBMPimageformcommonlyused.ThetransformationissignificantbecauseitiseasytodisplaytheDICOMimagesonmanycommonlyusedimagerytools.Wealsocomparedourresultswiththoseofothersoftware.ThesoftwareofthisarticlerealizedthereadinganddisplayingofDICOMimages.DuetothelimitationofthedesigntimeandtheknowledgeofI,inthedesign,theprocedurerealizedaswellasthepapermusthavegotsomemistakesandshortcomingsInstructionsaswellasadvicearewelcome.Keywords:DICOM,BMP,TRANSFORMS,DISPLAY目錄摘要………….………IAbstract……………..…II第一章緒論………………………..…11.1引言………….11.2課題背景…………………….11.3VisualC++6.0………………..1第二章DICOM標(biāo)準(zhǔn)………………..32.1DICOM標(biāo)準(zhǔn)概述……………32.1.1DICOM標(biāo)準(zhǔn)產(chǎn)生背景……………….32.1.2DICOM標(biāo)準(zhǔn)開展應(yīng)用……………….42.2DICOM標(biāo)準(zhǔn)內(nèi)容……………62.2.1DICOM標(biāo)準(zhǔn)詞匯及概念…………….62.2.2DICOM標(biāo)準(zhǔn)的組成………………….7第三章格式轉(zhuǎn)換……………………113.1DICOM格式………………..113.1.1DICOM文件頭……………………...113.1.2DICOM數(shù)據(jù)元素…………………...123.1.3像素?cái)?shù)據(jù)元…………153.2BMP格式…………………...163.2.1文件頭………………173.2.2位圖信息頭…………183.2.3位圖表項(xiàng)……………193.2.4位圖數(shù)據(jù)……………193.3格式轉(zhuǎn)換…………………...213.3.1轉(zhuǎn)換思路……………….……………213.3.2轉(zhuǎn)換類的定義……………….………223.3.3轉(zhuǎn)換算法……………24第四章圖像顯示……………………314.1位圖原理…………………...314.1.1DDB位圖……………314.1.2DIB位圖……………..324.2位圖的顯示方法…………...324.3顯示實(shí)現(xiàn)…………………...34結(jié)論…………………38參考文獻(xiàn)……………39附錄…………………40致謝…………………44第一章緒論1.1引言隨著醫(yī)學(xué)信息學(xué)的開展,數(shù)字化醫(yī)院成為一個(gè)趨勢(shì)。數(shù)字化醫(yī)院主要解決兩個(gè)方面的問題:一是醫(yī)院無膠片化,由PACS系統(tǒng)實(shí)現(xiàn);二是無紙化,由HIS和RIS實(shí)現(xiàn)。DICOM就是解決數(shù)字化醫(yī)院的一個(gè)重要標(biāo)準(zhǔn)。20世紀(jì)80年代以來,為了利用網(wǎng)絡(luò)在不同的設(shè)備和醫(yī)療診斷系統(tǒng)之間交換圖像數(shù)據(jù)和診斷信息,由美國(guó)放射學(xué)會(huì)ACR和美國(guó)電器制造商協(xié)會(huì)〔NEMA〕聯(lián)合制定DICOM標(biāo)準(zhǔn),經(jīng)過不斷的開展,今天已經(jīng)成為醫(yī)學(xué)信息領(lǐng)域的國(guó)際標(biāo)準(zhǔn),被生產(chǎn)醫(yī)療儀器和醫(yī)學(xué)診斷系統(tǒng)的廠家所接受,在國(guó)外得到了廣泛的應(yīng)用。然而,在我國(guó),由于大多數(shù)醫(yī)學(xué)圖像設(shè)備和系統(tǒng)在引進(jìn)前期未考慮圖像和相關(guān)醫(yī)學(xué)信息的存儲(chǔ)和通信功能,只是配置一部打印機(jī)或用X線膠片做圖像記錄,造成了目前醫(yī)院特別是中小醫(yī)院DICOM設(shè)備與非DICOM設(shè)備并存的現(xiàn)象,同時(shí)也為PACS系統(tǒng)的開展造成了障礙。因而,在DICOM設(shè)備與非DICOM設(shè)備之間研究二者的互聯(lián)、進(jìn)行非DICOM與DICOM圖像的轉(zhuǎn)換具有重要的意義。1.2課題背景DICOM〔DigitalImagingandCommunicationofMedicine,簡(jiǎn)稱DICOM〕是用于醫(yī)學(xué)圖像和通信的國(guó)際標(biāo)準(zhǔn)[1],它標(biāo)準(zhǔn)了醫(yī)學(xué)圖像及各種數(shù)字信息的格式,支持TCP/IP網(wǎng)絡(luò)。在DICOM的支持下,可以進(jìn)行不同廠家生產(chǎn)的設(shè)備的互連,將圖像從一個(gè)廠家的設(shè)備發(fā)送到另一個(gè)廠家的工作站上顯示。這些工作站主要基于UNIX的系統(tǒng),很多廠家只提供UNIX平臺(tái)下的圖像顯示軟件。隨著PC機(jī)功能越來越強(qiáng),網(wǎng)絡(luò)速度越來越快,醫(yī)生迫切希望在辦公室或家里都可以通過PC機(jī)檢索和查閱病人的圖像資料,為此需要實(shí)現(xiàn)DICOM圖像在Windows平臺(tái)下的顯示。本文在分析DICOM文件格式根底上,研究了DICOM文件格式和BMP文件格式的轉(zhuǎn)換以及顯示。1.3VisualC++6.0VisualC++是Microsoft公司推出的開發(fā)Win32環(huán)境程序,是面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫和界面設(shè)計(jì)集成交互操作、可開發(fā)多種程序〔應(yīng)用程序、動(dòng)態(tài)鏈接庫(kù)、ActiveX控件等〕等優(yōu)點(diǎn),而且通過簡(jiǎn)單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫(kù)接口、OLE2、WinSock網(wǎng)絡(luò)、3D控制界面。另外,VisualC++還提供了很多向?qū)?。MFC封裝了Win32API,OLEAPI,ODBCAPI等底層函數(shù)的功能,并提供更高一層的接口,簡(jiǎn)化了Windows編程。同時(shí),MFC支持對(duì)底層API的直接調(diào)用。用戶可以利用VisualC++以兩種方式編寫Win32應(yīng)用程序,一種方式是基于WindowsAPI的C編程方式,另一種是基于MFC的C++編程方式。C編程方式是傳統(tǒng)的、久經(jīng)考驗(yàn)的編程方式,代碼的效率較高,但開發(fā)難度與開發(fā)的工作量大。C++編程方式代碼運(yùn)行效率相對(duì)較低,但開發(fā)難度小、開發(fā)工作量小、源代碼效率高。由于VisualC++本身就是一個(gè)圖形的開發(fā)界面,它提供了豐富的關(guān)于位圖操作的函數(shù),為開發(fā)圖像處理系統(tǒng)提供了極大的方便。本文是基于C++編程方式進(jìn)行編程的。第二章DICOM標(biāo)準(zhǔn)2.1DICOM標(biāo)準(zhǔn)概述DICOM標(biāo)準(zhǔn)產(chǎn)生背景DICOM是DigitalImagingandCommunicationofMedicine的縮寫,是美國(guó)放射學(xué)會(huì)(AmericanCollegeofRadiology,ACR)和美國(guó)電器制造商協(xié)會(huì)(National

Electrical

Manufacturers

Association,NEMA)組織制定的專門用于醫(yī)學(xué)圖像的存儲(chǔ)和傳輸?shù)臉?biāo)準(zhǔn)名稱[2]。經(jīng)過十多年的開展,該標(biāo)準(zhǔn)已經(jīng)被醫(yī)療設(shè)備生產(chǎn)商和醫(yī)療界廣泛接受,在醫(yī)療儀器中得到普及和應(yīng)用,帶有DICOM接口的計(jì)算機(jī)斷層掃描(CT)、核磁共振(MR)、心血管造影和超聲成像設(shè)備大量出現(xiàn),在醫(yī)療信息系統(tǒng)數(shù)字網(wǎng)絡(luò)化中起了重要的作用。下列圖為DICOM標(biāo)準(zhǔn)各版本發(fā)布時(shí)間表。圖2.1DICOM標(biāo)準(zhǔn)各版本發(fā)布時(shí)間表DICOM是隨著圖像化、計(jì)算機(jī)化的醫(yī)療設(shè)備的普及和醫(yī)院管理信息系統(tǒng),特別是圖像存檔和通信系統(tǒng)(PictureArchivingandCommunicationSystem,PACS)和遠(yuǎn)程醫(yī)療系統(tǒng)的開展應(yīng)運(yùn)而生的。當(dāng)CT和MR等設(shè)備生成高質(zhì)量的、形象直觀的圖像在醫(yī)療診斷中廣泛使用時(shí),由于不同的生產(chǎn)商不同型號(hào)的設(shè)備產(chǎn)生的圖像各自采用了不同的格式,使得不同的設(shè)備之間的信息資源難以互相使用,醫(yī)院PACS系統(tǒng)的實(shí)施具有很大的困難。醫(yī)療信息系統(tǒng)隨之帶來許多新的問題:如何存儲(chǔ)數(shù)據(jù)量極大的圖像并能有效地管理?不同生產(chǎn)商的設(shè)備能否直接連接?如何能夠在不同的生產(chǎn)商設(shè)備之間能夠共享信息資源?等等。很明顯這些問題的解決方法就是采用統(tǒng)一的標(biāo)準(zhǔn)。為此,美國(guó)放射學(xué)會(huì)和美國(guó)電器制造商協(xié)會(huì)在1983年成立了專門委員會(huì),制定用于醫(yī)學(xué)圖像存儲(chǔ)和通信的標(biāo)準(zhǔn),提供與制造商無關(guān)的數(shù)字圖像及其相關(guān)的通信和存儲(chǔ)功能的統(tǒng)一格式,以促進(jìn)PACS的開展,并提供廣泛的分布式的診斷和查詢功能。ACR-NEMA1.0版本于1985年推出,隨后增加了新的數(shù)據(jù)元素并對(duì)局部?jī)?nèi)容進(jìn)行修改,形成2.0版本。由于認(rèn)識(shí)到標(biāo)準(zhǔn)對(duì)網(wǎng)絡(luò)支持的缺乏和標(biāo)準(zhǔn)本身存在的結(jié)構(gòu)性問題,ACR-NEMA結(jié)合當(dāng)時(shí)的技術(shù)條件和方法對(duì)標(biāo)準(zhǔn)作了徹底的重新制定,在1993年正式公布了新的版本,命名為DICOM3.0。與原版本相比,3.0版本采用了面向?qū)ο蟮姆治龇椒?,定義了醫(yī)學(xué)圖像在存儲(chǔ)和通信過程中的各種實(shí)體和關(guān)系,提供了對(duì)ISO-OSI(Inter-nationalStandardOrganization-OpenSystemInterconnection)和TCP/IP(TransmissionControlProtocol/InternetProtocol)的支持,使得在醫(yī)學(xué)圖像應(yīng)用層上可以與其它通信協(xié)議棧直接通信而不需要重新編寫程序。考慮到技術(shù)的開展,標(biāo)準(zhǔn)采用了多局部的文檔結(jié)構(gòu),對(duì)可能變化或擴(kuò)充的局部以附錄的形式提供,這樣標(biāo)準(zhǔn)在更新時(shí)涉及面可以盡量小。下列圖為PACS系統(tǒng)框圖。圖2.2PACS系統(tǒng)框圖DICOM標(biāo)準(zhǔn)開展應(yīng)用毫無疑問,DICOM是醫(yī)學(xué)圖像信息系統(tǒng)領(lǐng)域中的核心,它主要涉及到信息系統(tǒng)中最主要也是最困難的醫(yī)學(xué)圖像的存儲(chǔ)和通信,可直接應(yīng)用在放射學(xué)信息系統(tǒng)(RIS)和圖像存檔與通信系統(tǒng)(PACS)中。DICOM也是研究和開發(fā)具有網(wǎng)絡(luò)連接功能,實(shí)現(xiàn)信息資源共享的新型醫(yī)療儀器的技術(shù)根底。醫(yī)療儀器在朝著自動(dòng)化、智能化開展的同時(shí),也在向著具有通信能力的遙控遙測(cè)和信息遠(yuǎn)程獲取的網(wǎng)絡(luò)功能開展,醫(yī)療儀器既是醫(yī)療信息系統(tǒng)中的信息源,又是系統(tǒng)中的信息使用者,是信息系統(tǒng)中的一個(gè)主要環(huán)節(jié),網(wǎng)絡(luò)化的醫(yī)療儀器對(duì)醫(yī)學(xué)信息系統(tǒng)的重要性是不言而喻的。DICOM標(biāo)準(zhǔn)的另一個(gè)特點(diǎn)是它定義在網(wǎng)絡(luò)通信協(xié)議的最上層,不涉及到具體的硬件實(shí)現(xiàn)而直接應(yīng)用網(wǎng)絡(luò)協(xié)議,因此與網(wǎng)絡(luò)技術(shù)的開展保持相對(duì)獨(dú)立,可以隨著網(wǎng)絡(luò)性能的提高而使DICOM系統(tǒng)的性能立即得到改善。DICOM盡管提供了OSI的網(wǎng)絡(luò)模型,但現(xiàn)在實(shí)際上網(wǎng)絡(luò)絕大局部都是在TCP/IP協(xié)議下構(gòu)成的,網(wǎng)絡(luò)硬件采用的形式可以多種多樣,如100M的雙絞線100Base-T,光纖FDDI,綜合業(yè)務(wù)數(shù)字網(wǎng)ISDN,T1線路等,還有速度較低的10兆網(wǎng)10Base-T和線路。只要設(shè)備具有支持TCP/IP協(xié)議的網(wǎng)絡(luò)接口,在軟件的支持下,就可以做到像PC機(jī)一樣實(shí)現(xiàn)“即插即用〞,非常方便地參加到醫(yī)學(xué)信息系統(tǒng)的網(wǎng)絡(luò)中。在這樣的意義下,用DICOM實(shí)現(xiàn)的醫(yī)療信息系統(tǒng),無論是RIS還是PACS,都具有類似的結(jié)構(gòu)。在采用DICOM標(biāo)準(zhǔn)的信息網(wǎng)絡(luò)系統(tǒng)中,所有DICOM設(shè)備之間都可以按照DICOM的網(wǎng)絡(luò)上層協(xié)議進(jìn)行互相連接和操作。臨床醫(yī)生可以在辦公室查看B超設(shè)備的圖像和結(jié)果,可以在CT機(jī)上調(diào)用核磁共振圖像進(jìn)行圖像的疊加融合,也可以通過網(wǎng)絡(luò)調(diào)用存儲(chǔ)在其它醫(yī)院的圖像結(jié)果。無論是本院、本地還是相距很遠(yuǎn)的外地,DICOM設(shè)備都可以通過網(wǎng)絡(luò)相互聯(lián)系,交換信息。由于提供了統(tǒng)一的存儲(chǔ)格式和通信方式,普及DICOM標(biāo)準(zhǔn),可以簡(jiǎn)化醫(yī)療信息系統(tǒng)設(shè)計(jì),防止許多重復(fù)性的工作,加快信息系統(tǒng)的開發(fā)速度。對(duì)于實(shí)現(xiàn)無紙化、無膠片化的醫(yī)院和遠(yuǎn)程醫(yī)療系統(tǒng)的實(shí)施將會(huì)起極其重要的作用。下列圖為DICOM的應(yīng)用范疇。圖2.3DICOM的應(yīng)用范疇2.2DICOM標(biāo)準(zhǔn)內(nèi)容DICOM標(biāo)準(zhǔn)詞匯及概念DICOM標(biāo)準(zhǔn)涉及到醫(yī)學(xué)圖像、數(shù)據(jù)通信、管理信息系統(tǒng)等領(lǐng)域,在標(biāo)準(zhǔn)中又采用了面向?qū)ο蟮拿枋龇椒ê虴-R(Entity-Relation)模型,從而引入了大量的各專業(yè)方面的術(shù)語,給標(biāo)準(zhǔn)的閱讀和理解帶來困難。下面簡(jiǎn)要地將標(biāo)準(zhǔn)中涉及的常用的技術(shù)詞匯和縮略語給予解釋。1.實(shí)體(Entity):表示一個(gè)或一類有相同特性個(gè)體的應(yīng)用對(duì)象。在計(jì)算機(jī)系統(tǒng)分析中,但凡可以區(qū)別并被人們識(shí)別的事、物、概念等,都可以被抽象為實(shí)體。實(shí)體一般具有假設(shè)干特征,稱為屬性。如:患者是一個(gè)實(shí)體,具有姓名、性別、年齡等屬性。圖像也是一個(gè)實(shí)體,它有圖像尺寸、圖像數(shù)據(jù)等屬性。2.聯(lián)系(Relation):表示實(shí)體之間的相互關(guān)系。如患者實(shí)體與分析實(shí)體之間存在著引用聯(lián)系,打印機(jī)實(shí)體和膠片實(shí)體之間存在著打印的聯(lián)系。3.E-R模型:描述現(xiàn)實(shí)世界的一種信息模型。通過定義實(shí)體以及實(shí)體間的聯(lián)系,表現(xiàn)系統(tǒng)的需求和功能。通常以E-R圖的方式表示。在DICOM中,用方框表示實(shí)體,菱形表示聯(lián)系,用帶箭頭或不帶箭頭的線段將實(shí)體(方框)與聯(lián)系(菱形)連接表示它們之間存在聯(lián)系。這是面向?qū)ο蟮姆治龇椒ㄋ捎玫闹饕硎痉椒?,是?duì)客觀世界的一種抽象。4.對(duì)象(Object):外部世界事物在計(jì)算機(jī)內(nèi)部的表示,是事物屬性值和處理方法的集合。對(duì)象具有封裝和繼承的特征。封裝是指對(duì)象將屬性和方法集合在一起,一般情況下只提供應(yīng)自己和派生對(duì)象使用。繼承是指當(dāng)一個(gè)對(duì)象是由另一個(gè)對(duì)象(父對(duì)象)派生出時(shí),它就自動(dòng)具有父對(duì)象所具有的屬性和方法。面向?qū)ο蟮姆椒ň褪且詫?duì)象技術(shù)為中心,分析系統(tǒng)中各種信息之間的關(guān)系,抽象出系統(tǒng)各層次的對(duì)象模型,給出準(zhǔn)確的系統(tǒng)描述,并在計(jì)算機(jī)系統(tǒng)中給予實(shí)現(xiàn)。應(yīng)用面向?qū)ο蟮姆椒ǎ梢蕴岣唛_發(fā)效率,實(shí)現(xiàn)軟件復(fù)用。5.信息對(duì)象定義(InformationObjectDefinition,IOD):信息實(shí)體的抽象,是DICOM命令的作用受體。一個(gè)信息對(duì)象定義〔IOD〕是一個(gè)面向?qū)ο蟮某橄髷?shù)據(jù)模式,用來指定關(guān)于現(xiàn)實(shí)世界對(duì)象的信息。一個(gè)IOD提供了帶有用來交換的信息的通常考慮的通訊應(yīng)用實(shí)體。一個(gè)IOD不代表一個(gè)特定的現(xiàn)實(shí)世界對(duì)象的實(shí)體,但相當(dāng)一個(gè)共享相同屬性的現(xiàn)實(shí)世界對(duì)象類。一個(gè)用來代表單一的現(xiàn)實(shí)世界對(duì)象類IOD由一個(gè)規(guī)格化的信息對(duì)象調(diào)用。一個(gè)包括相關(guān)的現(xiàn)實(shí)世界對(duì)象信息的IOD由復(fù)合信息對(duì)象調(diào)用。6.效勞(Service):某對(duì)象為其它對(duì)象或程序提供的功能。當(dāng)要求使用此功能時(shí)稱申請(qǐng)效勞,申請(qǐng)效勞的對(duì)象稱效勞用戶,而能完成該功能的對(duì)象是效勞的提供者。7.效勞對(duì)象對(duì)(ServiceObjectPair,SOP):DICOM信息傳遞的根本功能單位。包括一個(gè)信息對(duì)象和一組DICOM消息效勞元素。一個(gè)效勞類說明定義了一組一個(gè)或更多的與一個(gè)特定的功能〔由通訊應(yīng)用實(shí)體實(shí)現(xiàn)〕相關(guān)的SOP類。一個(gè)效勞類說明也定義了允許實(shí)現(xiàn)規(guī)定一些預(yù)定義級(jí)別的到一個(gè)或更多的SOP類的遵從性。應(yīng)用可以遵從SOP類,作為一個(gè)效勞類用戶〔SCU〕或效勞類提供者〔SCP〕。8.協(xié)議:計(jì)算機(jī)網(wǎng)絡(luò)中為保證能正確地傳輸數(shù)據(jù)而必須共同遵守的通信規(guī)那么和格式。9.ISO-OSI:國(guó)際標(biāo)準(zhǔn)化組織(ISO)所定義的開放系統(tǒng)互聯(lián)(OSI)的七層網(wǎng)絡(luò)參考模型。作為一個(gè)嚴(yán)格的網(wǎng)絡(luò)模型,對(duì)于計(jì)算機(jī)網(wǎng)絡(luò)的研究和開展起了重要的作用,但是由于種種原因在實(shí)際中并未得到廣泛的普及使用。DICOM標(biāo)準(zhǔn)在制定時(shí),OSI正是開展的高潮,因此也作為DICOM中主要的網(wǎng)絡(luò)參考模型。10.TCP/IP:是傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議,它首先在UNIX系統(tǒng)中使用,隨后成為計(jì)算機(jī)網(wǎng)絡(luò)中不同種類計(jì)算機(jī)之間通信的主要通信協(xié)議,是互聯(lián)網(wǎng)的根底。DICOM標(biāo)準(zhǔn)的組成DICOM標(biāo)準(zhǔn)是經(jīng)歷了一個(gè)從無到有、從簡(jiǎn)單到復(fù)雜的開展過程。在標(biāo)準(zhǔn)的制定過程中不斷聽取工業(yè)界、學(xué)術(shù)界、醫(yī)療界等各方面的意見和建議,注意標(biāo)準(zhǔn)的可擴(kuò)充性和擴(kuò)展性,經(jīng)歷了ACR-NEMA1.0和2.0的版本到目前的DICOM3.0版本,標(biāo)準(zhǔn)的組成也在不斷地加以補(bǔ)充,目前標(biāo)準(zhǔn)共有以下18個(gè)根本局部和擴(kuò)充局部組成[3][4][5]。1.引言與概述〔IntroductionandOverview〕:簡(jiǎn)要地概述DICOM標(biāo)準(zhǔn)涉及到的范圍和框架,指出標(biāo)準(zhǔn)起草的背景和標(biāo)準(zhǔn)的目的和意義,并對(duì)其他局部的內(nèi)容做了簡(jiǎn)介。2.遵從性聲明〔Conformance〕:詳細(xì)說明DICOM的兼容性目的和架構(gòu),說明了標(biāo)準(zhǔn)是一個(gè)可以參考遵循的多層次的專業(yè)標(biāo)準(zhǔn),同時(shí)闡述了參考遵從標(biāo)準(zhǔn)的產(chǎn)品應(yīng)該發(fā)布的遵從性聲明。3.信息對(duì)象定義〔InformationObjectDefinitions〕:詳細(xì)給出了標(biāo)準(zhǔn)從醫(yī)療現(xiàn)實(shí)中抽象出來的信息對(duì)象的組成、概念和內(nèi)涵。同時(shí)定義了可以使用DICOM進(jìn)行通信的類別,它是標(biāo)準(zhǔn)研究的重要內(nèi)容。4.效勞類細(xì)那么〔ServiceClassSpecifications〕:標(biāo)準(zhǔn)將圖像通訊中可能涉及到的通訊類型分成假設(shè)干詳盡的對(duì)等的類別,將其定義為DICOM進(jìn)行通信的效勞類,并對(duì)這些類分別做了標(biāo)準(zhǔn)和界定,給出用于數(shù)字化交流的操作行為的抽象定義。5.數(shù)據(jù)結(jié)構(gòu)與編碼〔DataStructuresandEncoding〕:這一章對(duì)標(biāo)準(zhǔn)用到的數(shù)據(jù)結(jié)構(gòu)進(jìn)行了說明。對(duì)標(biāo)準(zhǔn)規(guī)定的專用的醫(yī)學(xué)圖像文件格式做了具體的規(guī)定。并且對(duì)可能關(guān)聯(lián)到的數(shù)據(jù)、字符進(jìn)行了編碼。6.數(shù)據(jù)字典〔DataDictionary〕:包括了標(biāo)準(zhǔn)中所有的數(shù)據(jù)元的編碼代號(hào)和編碼說明。標(biāo)準(zhǔn)采用了在所有的國(guó)際標(biāo)準(zhǔn)中都是唯一的標(biāo)識(shí)符UID,從而減少了實(shí)現(xiàn)的沖突。7.消息交換〔MessageExchange〕:定義了DICOM進(jìn)行信息交換通訊的醫(yī)學(xué)圖像應(yīng)用軟件所用到的效勞和協(xié)議。描述了建立和終止通訊連接的規(guī)那么:管理“請(qǐng)求及響應(yīng)〞命令的交換規(guī)那么;構(gòu)造命令和消息所必須的編碼規(guī)那么;同時(shí)也定義了DICOM應(yīng)用實(shí)體間的協(xié)議握手方式。8.支持網(wǎng)絡(luò)通信的消息交換〔NetworkCommunicationSupportforMessageExchange〕:這一局部標(biāo)準(zhǔn)了通訊協(xié)議和交換信息格式,描述了如何在TCP/IP網(wǎng)絡(luò)中使用網(wǎng)絡(luò)通訊進(jìn)行信息交換,并且定義了在網(wǎng)絡(luò)環(huán)境下的通訊效勞和DICOM應(yīng)用進(jìn)行信息交換的必要的上層協(xié)議。9.點(diǎn)對(duì)點(diǎn)通信支持的信息交換〔Point-to-PointCommunicationSupportforMessageExchange〕:已放棄。10.介質(zhì)交換的介質(zhì)存儲(chǔ)要求及文件格式標(biāo)準(zhǔn)〔MediaStorageandFileFormatforDataInterchange〕:它提供了一個(gè)用于不同類型醫(yī)學(xué)圖像間數(shù)據(jù)交換及不同物理介質(zhì)相關(guān)信息交換的框架。DICOM文件格式提供了一種封裝文件中數(shù)據(jù)集的方法。數(shù)據(jù)集代表了一個(gè)與DICOMIOD相關(guān)的SOP實(shí)例。11.介質(zhì)存儲(chǔ)應(yīng)用概述〔MediaStorageApplicationProfiles〕:說明將醫(yī)學(xué)影象信息存儲(chǔ)于可移動(dòng)介質(zhì)的模式。12.數(shù)據(jù)交換的媒介格式和物理媒介〔MediaFormatsandPhysicalMediaforDataInterchange〕:介紹存儲(chǔ)過程中數(shù)據(jù)和目錄的格式以及管理標(biāo)準(zhǔn)要求。13.支持點(diǎn)對(duì)點(diǎn)通信的打印管理〔PointManagementPoint-to-PointCommunicationSupport〕:已放棄。14.灰度圖像標(biāo)準(zhǔn)顯示函數(shù)〔GrayscaleStandardDisplayFunction〕:詳細(xì)標(biāo)準(zhǔn)了顯示灰度函數(shù),它提供了一些例如方法,說明如何調(diào)整灰度圖像與顯示系統(tǒng)。這對(duì)顯示參數(shù)包括膠片打印及其各種圖像顯示設(shè)備的標(biāo)準(zhǔn),有著非常重要的依據(jù),并且直接影響到臨床診斷的準(zhǔn)確性。15.平安概要〔SecurityProfiles〕:DICOM標(biāo)準(zhǔn)醫(yī)療圖像中包含了病人非常詳細(xì)的個(gè)人資料,因此為了保障在存儲(chǔ)傳輸過程中數(shù)據(jù)的平安性,有必要對(duì)信息實(shí)施加密傳輸。16.內(nèi)容映射資源〔ContentMappingResource〕:定制了一些結(jié)構(gòu)化報(bào)告模板的信息對(duì)象,設(shè)置了在信息對(duì)象中用到的編碼化詞匯,維護(hù)了標(biāo)準(zhǔn)中使用到的短語。17.解釋性信息〔ExplanatoryInformation〕:制定了一組信息化和標(biāo)準(zhǔn)化的包含解釋性信息的附件。18.通過互聯(lián)網(wǎng)訪問DICOM持久型對(duì)象〔WebAccesstoDICOMPersistentObject〕:此局部定義了通過使用URL/URI請(qǐng)求來訪問DICOM對(duì)象的方式以及返回結(jié)果的格式。DICOM是一個(gè)開放的系統(tǒng),標(biāo)準(zhǔn)采用相對(duì)獨(dú)立的多文檔結(jié)構(gòu),便于對(duì)單獨(dú)局部進(jìn)行擴(kuò)充而不需要大幅更改整個(gè)標(biāo)準(zhǔn),增強(qiáng)了它的健壯性和擴(kuò)展性。同時(shí)各局部也是緊密相關(guān)的,因此它的復(fù)雜性要求標(biāo)準(zhǔn)研究者對(duì)DICOM體系結(jié)構(gòu)有全面的認(rèn)知。第三章格式轉(zhuǎn)換3.1DICOM格式DICOM格式[6]圖像文件是指按照DICOM標(biāo)準(zhǔn)而存儲(chǔ)的文件。DICOM文件一般由DICOM文件頭和DICOM數(shù)據(jù)集合組成,如圖3.1。DICOM數(shù)據(jù)集合由DICOM數(shù)據(jù)元素(DataElement)按一定順序排列組成,而DICOM數(shù)據(jù)元素那么是DICOM文件最根本的構(gòu)成單元。數(shù)據(jù)元…..數(shù)據(jù)元數(shù)據(jù)元前綴前同步數(shù)據(jù)元…..數(shù)據(jù)元數(shù)據(jù)元前綴前同步文件頭數(shù)據(jù)集圖3.1DICOM文件總體結(jié)構(gòu)DICOM文件頭DICOM文件頭(DICOMFileMetaInformation)中包含了標(biāo)識(shí)數(shù)據(jù)集合的相關(guān)信息。文件頭的最開始是文件前言(Preamble),它由128個(gè)00H字節(jié)組成,緊接著就是長(zhǎng)度為4個(gè)字節(jié)的字符串“DICM〞,嚴(yán)格地講,每個(gè)DICOM文件都必須包括該文件頭,并且可以根據(jù)該字符串值來判斷一個(gè)文件是否是DICOM格式文件。然而,在實(shí)際工程開發(fā)過程中所遇到的情況并非如此,圖3.2是富士公司設(shè)備產(chǎn)生的人體腦部CT圖像,通過二進(jìn)制方式查看該DICOM圖像文件發(fā)現(xiàn)其文件頭局部根本沒有字符“DICM〞,其它如Picker公司、Philips公司等的設(shè)備產(chǎn)生的DICOM圖像也有類似情形。上述情況可以說明一個(gè)問題,即并非所有影像設(shè)備制造商都嚴(yán)格遵守DICOM3.0標(biāo)準(zhǔn),充其量是局部遵守了這個(gè)標(biāo)準(zhǔn),原因可能是多方面的,但多多少少有保護(hù)自身商業(yè)利益的意味。DICOM文件頭局部還包括其它一些非常有用的信息,如文件的傳輸格式、生成該文件的應(yīng)用程序等等。關(guān)于文件頭有幾點(diǎn)說明:1.除了128字節(jié)的文件前同步碼和4字節(jié)的DICM前綴外,所有其它的文件頭數(shù)據(jù)元都必須采用上面介紹的顯式格式編碼,各個(gè)數(shù)據(jù)元按照標(biāo)簽值從小到大的順序編碼。2.每個(gè)文件頭元素的長(zhǎng)度必須為偶數(shù),否那么按照規(guī)定補(bǔ)充一個(gè)字節(jié)。3.所有〔0002,****〕類的標(biāo)簽都為DICOM所保存。為了兼容后續(xù)版本,如果發(fā)現(xiàn)文件中有目前尚未規(guī)定的〔0002,****〕類標(biāo)簽,那么忽略它。圖3.2DICOM數(shù)據(jù)元素?cái)?shù)據(jù)元素(DataElement)是DICOM格式圖像文件最根本的構(gòu)成單元。它由四個(gè)局部組成:標(biāo)簽(Tag)、數(shù)據(jù)描述VR(ValueRepresentation)、數(shù)據(jù)長(zhǎng)度VL(ValueLength)以及實(shí)際數(shù)據(jù)值Value,如圖3.3所示。1.標(biāo)簽是一個(gè)4字節(jié)的無符號(hào)整數(shù),DICOM中所有數(shù)據(jù)元素都可用標(biāo)簽來唯一表示,標(biāo)簽由兩個(gè)局部組成:組號(hào)(高位2字節(jié))和元素號(hào)(低位2字節(jié)),在DICOM標(biāo)準(zhǔn)的數(shù)據(jù)字典中,所有元素都是用“(組號(hào),元素號(hào))〞這種表示方式一一對(duì)應(yīng)的。2.數(shù)據(jù)描述VR指明數(shù)據(jù)元素中數(shù)據(jù)的類型,為2字節(jié)的字符串。例如,假設(shè)VR為“DA〞那么表示該數(shù)據(jù)元素存儲(chǔ)日期型數(shù)據(jù),VR是可選的,取決于事先商定的數(shù)據(jù)傳輸句法(TransferSyntaxUID),它包含在標(biāo)簽為(0002,0010)的數(shù)據(jù)元素中。數(shù)據(jù)傳輸句法(TransferSyntaxUID)后面作詳細(xì)介紹。VR分為顯式(ExplicitVR)和隱式(ImplicitVR)兩種。數(shù)據(jù)在顯式傳輸時(shí)VR必須存在,而隱式傳輸時(shí)VR為空。數(shù)據(jù)長(zhǎng)度VL指明數(shù)據(jù)元素的數(shù)據(jù)域中數(shù)據(jù)的長(zhǎng)度(字節(jié)數(shù))。數(shù)據(jù)域中包含了數(shù)據(jù)元素的數(shù)值。數(shù)據(jù)集合傳輸次序數(shù)據(jù)元素?cái)?shù)據(jù)元素?cái)?shù)據(jù)元素…數(shù)據(jù)元素?cái)?shù)據(jù)元素標(biāo)簽數(shù)據(jù)描述數(shù)據(jù)長(zhǎng)度實(shí)際數(shù)據(jù)值可選項(xiàng),取決于傳輸U(kuò)ID圖3.3DICOM文件數(shù)據(jù)元素的組成下面以標(biāo)簽為(0010,0010)表示病人姓名的數(shù)據(jù)元素為例對(duì)上述介紹做一比擬形象的說明。①顯式〔ExplicitVR〕傳輸時(shí): 4字節(jié)2字節(jié)2字節(jié)C字節(jié)〔16進(jìn)制〕/12字節(jié)0010,0010PNOCHarisonFordExplicitTagVRVLValueFieldPN:PersonName.表示數(shù)據(jù)類型②隱式〔ImplicitVR〕傳輸時(shí):4字節(jié)4字節(jié)C字節(jié)〔16進(jìn)制〕/12字節(jié)0010,0010OOOCHarisonFordImplicitTagVLValueFile由此可見,顯式時(shí)VR中存放數(shù)據(jù)類型,隱式時(shí)VR不存在。VL表示數(shù)值長(zhǎng)度,如上例中的“HarisonFord〞占12個(gè)字節(jié)長(zhǎng)。組號(hào)為0002的數(shù)據(jù)元素都是顯式的。標(biāo)簽為(0002,0010)的數(shù)據(jù)元素存放的是數(shù)據(jù)傳輸協(xié)議標(biāo)識(shí)(TransferSyntaxUID)其具體內(nèi)容如表3.1所示。UID形式上是一個(gè)字符串,用于唯一標(biāo)識(shí)DICOM標(biāo)準(zhǔn)中各種不同的信息對(duì)象,在DICOM文件中有很多UID,如診斷UID、字符格式UID圖像存儲(chǔ)UID、傳輸協(xié)議UID等等,這些UID有些可以套用現(xiàn)成的,有些必須要自己確定,特別是UID中的廠商信息、醫(yī)院信息以及圖像的分類序列號(hào)等等。表3.1:傳輸協(xié)議UIDTransferSyntaxUIDDefinitionRawdataImplicitVRLittleEndian.XRawdataImplicitVRX=1:LittleEndianX=2:BigEndian.4.XJPEGCompressionXX=50-64:LossyJPEGXX=65-70:LosslessJPEG.5LosslessRunLengthEncoding每個(gè)UID由兩局部組成,一個(gè)根(orgroot)和一個(gè)后綴(suffix),其格式為:<orgroot>.<suffix>.<suffix>由所指示的機(jī)構(gòu)分配,并且必須在<orgroot>范圍保證唯一性。如“1.2.840.10008”專門保存給DICOM所定義的術(shù)語(如傳輸語法)使用,其中,“1〞表示國(guó)際標(biāo)準(zhǔn)化組織ISO,“2〞表示ISO下屬的一個(gè)成員機(jī)構(gòu),這里指美國(guó)國(guó)家標(biāo)準(zhǔn)組織ANSI,“840〞表示成員機(jī)構(gòu)所在的國(guó)家或地區(qū)代碼,這里指美國(guó),“10008〞在這里指NEMA。表3.1中“.4.XX〞表示DICOM圖像是以JPEG壓縮方式傳輸和存儲(chǔ)的,XX為50至64之間的數(shù)值時(shí)表示有損壓縮,XX介于65和70之間表示無損壓縮。“000”表示采用無損行程編碼壓縮算法RLE(RunLengthEncoding)壓縮。表3.1中的“LittleEndian〞和“BigEndian〞表示字節(jié)存放次序。其中,對(duì)“LittleEndian〞而言,最重要的字節(jié)置右,最不重要的字節(jié)置左。而“BigEndian〞那么正相反,最重要的字節(jié)置左,最不重要的字節(jié)置右。如兩個(gè)字節(jié)中存放的二進(jìn)制數(shù)值為“1111111100000000〞,對(duì)“LittleEndian〞而言表示十進(jìn)制數(shù)255,而對(duì)“BigEndian〞而言那么表示十進(jìn)制數(shù)65280。傳輸協(xié)議UID中缺省字節(jié)存放次序?yàn)閭鬏斦Z法是由一個(gè)UID標(biāo)識(shí)的。DICOM默認(rèn)的傳輸語法是隱式小端字節(jié)序傳輸語法,并采用無損方式的JPEG壓縮算法。傳輸語法定義了三個(gè)方面的內(nèi)容:數(shù)值表示法如何指定;多字節(jié)數(shù)在存儲(chǔ)或傳輸時(shí)的字節(jié)順序,是低位字節(jié)先存儲(chǔ)或發(fā)送,還是高位字節(jié)先存儲(chǔ)或發(fā)送;封裝情況下的壓縮格式,是采用JPEG還是RLE的壓縮算法,是有損方式還是無損方式等。3.值域長(zhǎng)度指明該數(shù)據(jù)元的數(shù)據(jù)域中數(shù)據(jù)的長(zhǎng)度〔字節(jié)數(shù)〕。4.數(shù)據(jù)域中包含了該數(shù)據(jù)元的數(shù)值。DICOM中所有的數(shù)據(jù)都是以數(shù)據(jù)元素的形式出現(xiàn)的〔除文件頭中128字節(jié)的文件前言〕。5.SQ數(shù)據(jù)元和嵌套數(shù)據(jù)集的格式,表示值為SQ的數(shù)據(jù)元,其值域可以包含一個(gè)或多個(gè)數(shù)據(jù)元,這些數(shù)據(jù)元稱為項(xiàng)。每個(gè)項(xiàng)中又可以包含其它項(xiàng),從而形成多級(jí)嵌套結(jié)構(gòu)。SQ數(shù)據(jù)元中有三個(gè)特殊的數(shù)據(jù)元,即項(xiàng)〔FFFE,E000〕、項(xiàng)定界數(shù)據(jù)元〔FFFE,E00D〕、系列定界數(shù)據(jù)元〔FFFE,E0DD〕。不管傳輸語法所規(guī)定的表示值編碼規(guī)那么是什么,這三個(gè)數(shù)據(jù)元都必須采用隱含表示值編碼方式。3.1.3像素?cái)?shù)據(jù)元像素?cái)?shù)據(jù)元〔7EF0,0010〕是DICOM文件中最重要的一個(gè)數(shù)據(jù)單元,該數(shù)據(jù)元包含了醫(yī)學(xué)圖像的顯示所必須的數(shù)據(jù)。與像素?cái)?shù)據(jù)元有密切關(guān)系的其他數(shù)據(jù)元是:〔0028,0008〕圖像幀數(shù)〔0028,0010〕圖像行數(shù)〔0028,0011〕圖像列數(shù)〔0028,0100〕分配位數(shù)〔0028,0101〕存儲(chǔ)位數(shù)〔0028,0102〕最高位數(shù)像素?cái)?shù)據(jù)的編碼由分配、存儲(chǔ)和最高位數(shù)決定,分配位數(shù)一定是大于存儲(chǔ)位數(shù)的。根據(jù)分配、存儲(chǔ)和最高位數(shù)的不同,像素?cái)?shù)據(jù)編碼有如圖3.4幾種情況DICOM圖像的像素?cái)?shù)據(jù)一般為16bits或12bits兩種。假設(shè)數(shù)據(jù)為16bits時(shí),那么每像素二字節(jié),如圖3.4中前兩種情況;假設(shè)數(shù)據(jù)為12bits時(shí),那么每像素字節(jié)分配情況就較為復(fù)雜,需要通過類別〔0028,0010〕,〔0028,0101〕,〔0028,0102〕的值來決定每像素分配位數(shù)、存儲(chǔ)位數(shù)和像素的最高位情況。當(dāng)每像素分配的位數(shù)為16、存儲(chǔ)位數(shù)為12、最高位為11時(shí),每像素占用二個(gè)字節(jié)位,每像素僅利用了二個(gè)字節(jié)中的低12bits。當(dāng)每像素分配的位數(shù)為16、存儲(chǔ)位數(shù)12、最高位為15時(shí),每像素占用二個(gè)字節(jié)位,每像素僅利用了二個(gè)字節(jié)中的高12bits。當(dāng)每像素分配的位數(shù)為12、存儲(chǔ)位數(shù)為12、最高位為11時(shí),每二個(gè)像素占用三個(gè)字節(jié)位,中間一個(gè)字節(jié)的內(nèi)容一分為二,分別屬于其前后二個(gè)字節(jié),所以每像素有12bits,如圖3.4第三種情況。1BitsAllocated=1615110BitBitsStored=12HightBit=11BitsAllocated=1615110bitBitsstored=12HighBit=11BitsAllocated=1223110bitBitsstored=12HighBit=11BitsAllocated=87530bitBitsstored=6HighBit=5圖3.4像素?cái)?shù)據(jù)編碼像素?cái)?shù)據(jù)可以是壓縮的,也可以是未壓縮的。以壓縮格式來傳送數(shù)據(jù)時(shí),表示值VR為OB;以未壓縮格式傳送數(shù)據(jù)時(shí),表示值VR為OW。對(duì)于未壓縮像素?cái)?shù)據(jù),通常按照從上到下、從左到右的順序,作為連續(xù)的位流進(jìn)行編碼和存儲(chǔ)。對(duì)于壓縮的像素?cái)?shù)據(jù),可以分段存放,由系列定界項(xiàng)表示結(jié)束,從而支持長(zhǎng)度預(yù)先未知的圖像壓縮過程。3.2BMP格式BMP文件格式[7]是微軟Windows操作系統(tǒng)支持的幾種圖像文件格式之一。BMP是Windows與生俱來的位圖格式,實(shí)際上可以用與存儲(chǔ)任何位圖數(shù)據(jù)。在微軟Windows下運(yùn)行的大多數(shù)圖像和圖像應(yīng)用程序都支持BMP文件的創(chuàng)立和顯示。BMP位圖文件的總體結(jié)構(gòu)如圖3.5:BITMAPFILEHEADER文件頭BITMAPINFOHEADER信息頭PALETTE調(diào)色板〔顏色表項(xiàng)〕DIBPIXELS圖像數(shù)據(jù)圖3.5BMP文件總體結(jié)構(gòu)文件頭BMP文件頭數(shù)據(jù)結(jié)構(gòu)含有BMP文件的類型、大小和打印格式等信息。其數(shù)據(jù)結(jié)構(gòu)定義如下:TypedefstrcttagBITMAPFILEHEADER{WORDbfType;DWORDbfSize;WOEDbfReserved1;WORDbfReserved2;DWORDbfOffBits;}BITMAPEILEHEADER;該結(jié)構(gòu)的長(zhǎng)度是固定的,為14個(gè)字節(jié)〔WORD為無符號(hào)16位整數(shù),DWORD為無符號(hào)32為整數(shù)〕;各個(gè)域的說明如下:1.bfType:指定文件類型,必須是0x424D,即字符串“BM〞,也就是說所有“.bmp〞。文件頭的頭兩個(gè)字節(jié)都是“BM〞;bfSize:指定文件大小,包括14個(gè)字節(jié);bfReserved1,bfReserved2:為保存字,無須考慮;bfOffBits:為從文件頭到實(shí)際的位圖數(shù)據(jù)的偏移字節(jié)數(shù)。位圖信息頭位圖信息頭BITMAPINFOHEADER數(shù)據(jù)結(jié)構(gòu)含有位圖文件的尺寸和顏色等信息。其數(shù)據(jù)結(jié)構(gòu)定義如下:TypedefstructtagBITMAPINFOHEADER{DWORDbiSize;WORDbiWidth;DWORDbiHeight;WORDbiplanes;WORDbiBitCount;DWORDbiCompression;DWORDbiSizeImage;DWORDbiXPelsPerMeter;DWORDbiYPelsPerMeter;DWORDbiClrUsed;DWORDbiClrImportant;}BITMAPINFOHEADER;該結(jié)構(gòu)的長(zhǎng)度也是固定的,為40個(gè)字節(jié)〔LONG為32位二進(jìn)制整數(shù)〕。各個(gè)域說明如下:bfSize:指定該結(jié)構(gòu)的長(zhǎng)度,為40個(gè)字節(jié);biWidth:指定圖像的寬度,單位為像素;biHight:指定圖像的高度,單位為像素;biplanes:必須為1,不用考慮;biBitCount:指定表示顏色時(shí)要用到的位數(shù),常用的值為1〔黑白二色圖〕、4〔16色圖〕、8〔256色〕、24〔真彩色〕,最新的“.bmp〞格式支持32位色;biCompression:指定位圖是否壓縮。必須是0〔不壓縮〕,1〔BI_RLE8壓縮類型〕或2〔BI_RLE4壓縮類型〕之一;biSizeImage:指定實(shí)際的位圖占用的字節(jié)數(shù);biXPelsPerMeter:指定目標(biāo)設(shè)備的水平分辨率,單位是像素/米;biXPelsPerMeter:指定目標(biāo)設(shè)備的垂直分辨率,單位是像素/米;biClrUsed:指定圖像實(shí)際用到的顏色數(shù);biClrImportant:指定本圖像中重要的顏色數(shù),如該值為0,那么所有的顏色都重要。位圖表項(xiàng)有些位圖需要顏色表,有些位圖,如真彩色圖,不需要顏色表,它們的BITMAPINFOHEADER后面直接就是位圖數(shù)據(jù)。顏色表實(shí)際上是一個(gè)數(shù)組,共有biClrUsed個(gè)元素〔如果該值為0,那么有2的biClrUsed冪個(gè)元素〕。數(shù)組中每個(gè)元素的類型是一個(gè)RGBQUAD結(jié)構(gòu),占4個(gè)字節(jié),其定義如下:TypedefstructtagRGBQUAD{BYTErgbBlue;BYTErgbGreen;BYTErgbRed;BYTErgbReserved;}RGBQUAD;其中:rgbBlue:藍(lán)色分量;rgbGreen:綠色分量;rgbRed:紅色分量;rgbReserved:保存值。位圖數(shù)據(jù)位圖數(shù)據(jù)是實(shí)際的圖像數(shù)據(jù),對(duì)于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該像素顏色在調(diào)色板中的索引值,對(duì)于真彩色圖像,圖像數(shù)據(jù)就是實(shí)際的R、G、B值。對(duì)于2色位圖,用1位就可以表示該像素的顏色〔一般0表示黑,1表示白〕,所以一個(gè)字節(jié)可以表示8個(gè)像素。對(duì)于16色位圖,用4位可以表示一個(gè)像素的顏色,所以一個(gè)字節(jié)可以表示2個(gè)像素。對(duì)于256色位圖,一個(gè)字節(jié)剛好可以表示1個(gè)像素。位圖陣列記錄了位圖的每一個(gè)像素值。在生成位圖文件時(shí),Windows從位圖的左下角開始逐行掃描位圖,將位圖的像素值一一記錄下來。這些記錄像素值的字節(jié)組成了位圖陣列。位圖陣列有壓縮和非壓縮兩種存儲(chǔ)格式。通常,位圖采用的是非壓縮格式。在非壓縮格式中,位圖的每一個(gè)點(diǎn)的像素值一一對(duì)應(yīng)于位圖陣列的假設(shè)干位,位圖陣列的大小由位圖的寬度、高度及位圖的顏色數(shù)決定。1.位圖掃描行與位圖陣列的關(guān)系設(shè)記錄一個(gè)掃描行的像素值需要n個(gè)字節(jié),那么:位圖陣列的0至n-1個(gè)字節(jié)記錄了位圖第一個(gè)掃描行的像素值;位圖陣列的n至2n-1個(gè)字節(jié)記錄了位圖第二個(gè)掃描行的像素值;依次類推,位圖陣列的〔m-1〕*n至m*n-1個(gè)字節(jié)記錄了位圖的第m個(gè)掃描行的像素值。位圖陣列的大小為n*biHeight。當(dāng)〔biWidth*biBitCount〕mod32=0時(shí):n=(biWidth*biBitCount)/8當(dāng)(biWidth*biBitCount)mod32!=0時(shí):n=(biWidth*biBitCount)/8+4位圖的每一個(gè)掃描行的字節(jié)數(shù)必須為4的倍數(shù),上式中加4的原因是為了使一個(gè)掃描行的像素值占用位圖陣列的字節(jié)數(shù)為4的倍數(shù),缺乏的位用0來填充。2.位圖像素值與位圖陣列的關(guān)系設(shè)記錄第m個(gè)掃描行的像素值的n個(gè)字節(jié)為:a0,a1...a(n-1)那么:當(dāng)biBitCount=1時(shí),a0字節(jié)記錄了第m個(gè)掃描行的第1至第8個(gè)像素點(diǎn),每個(gè)像素只占1位。當(dāng)biBitCount=4時(shí),a0字節(jié)記錄了第m個(gè)掃描行的第1至第2個(gè)像素點(diǎn),每個(gè)像素只占4位。當(dāng)biBitCount=8時(shí),a0字節(jié)記錄了第m個(gè)掃描行的第1個(gè)像素點(diǎn),一個(gè)像素只占一個(gè)字節(jié)。當(dāng)biBitCount=24時(shí),a0a1a2三個(gè)字節(jié)記錄了第m個(gè)掃描行的第1個(gè)像素點(diǎn),每個(gè)像當(dāng)biBitCount=32時(shí),a0a1a2a3四個(gè)字節(jié)記錄了第m個(gè)掃描行的第1個(gè)像3.顏色表與位圖陣列的關(guān)系通過上面的分析可知,對(duì)于biBitCount<=8位的位圖,都需要有一個(gè)顏色表項(xiàng)來記錄位圖數(shù)據(jù)的顏色分量值。對(duì)于biBitCount=24或32的位圖來說,那么不需要顏色表。在8位或8位以下的位圖中,位圖陣列記錄的值實(shí)際上是每個(gè)像素點(diǎn)在顏色表中的索引值。該索引值與顏色表的聯(lián)系:以256色位圖為例,256色位圖具有256個(gè)顏色表項(xiàng)。設(shè)取得位圖陣列中一像素的值為28,即該像素的顏色值是顏色表項(xiàng)中索引值為28所對(duì)應(yīng)的顏色。取值過程為:①確定索引值28在文件中位置,即54+28*4=166。②取值。以文件開頭為起始,從第166個(gè)字節(jié)開始連續(xù)讀取3個(gè)字節(jié),這三個(gè)字節(jié)就是該像素點(diǎn)在位圖陣列中的顏色RGB值。3.3格式轉(zhuǎn)換通過前面的介紹,我們已經(jīng)知道,設(shè)備廠商提供的DICOM圖像的顯示軟件都是基于UNIX系統(tǒng)的。要在Windows平臺(tái)下顯示DICOM圖像,需要將DICOM圖像格式轉(zhuǎn)換成Windows操作系統(tǒng)所支持的圖像格式,如BMP、JPG、GIF等。因此,我們可以把DICOM圖像顯示的問題轉(zhuǎn)化為DICOM格式和BMP、JPG和GIF格式的轉(zhuǎn)化問題。一般轉(zhuǎn)換原理根本相同,本文只研究DICOM格式轉(zhuǎn)換為BMP格式[8][9][10]。轉(zhuǎn)換思路1.格式轉(zhuǎn)換的總體思路:首先,定義一些存儲(chǔ)圖像參數(shù)的變量,并將變量初始化;其次,按照傳輸語法格式要求,對(duì)DICOM文件的各相關(guān)數(shù)據(jù)元進(jìn)行遍歷,提取出0002組、0028組和7EF0組有用的數(shù)據(jù)元的內(nèi)容,分別存入先前定義的變量,關(guān)閉DICOM文件;再將12位或16位的圖像數(shù)據(jù)轉(zhuǎn)換為8位灰度數(shù)據(jù);最后,翻開一空白文件,按照BMP文件格式的要求,將從DICOM文件里提取出的數(shù)據(jù)寫入新文件,格式轉(zhuǎn)換完畢。對(duì)于上述數(shù)據(jù)元的讀取,由于所需操作的數(shù)據(jù)元不多,我們采用雙層Switch多分支選擇結(jié)構(gòu)分別對(duì)組號(hào)和單元號(hào)進(jìn)行讀取。外層Switch結(jié)構(gòu)對(duì)數(shù)據(jù)組進(jìn)行選擇操作,內(nèi)層Switch結(jié)構(gòu)對(duì)數(shù)據(jù)單元進(jìn)行操作。2.格式轉(zhuǎn)換應(yīng)注意的問題①獲取圖像信息,實(shí)際上是對(duì)DICOM文件中各數(shù)據(jù)元的遍歷。數(shù)據(jù)元排列的順序是按照標(biāo)簽的數(shù)值從小到大編碼的,在遍歷數(shù)據(jù)元時(shí),有些數(shù)據(jù)元中所包含的信息與圖像是無關(guān)的,為提高程序遍歷的速度,只讀取有用的數(shù)據(jù)元。②讀取數(shù)據(jù)元〔0002,****〕時(shí),該組的所有數(shù)據(jù)元的表示值VR都是顯式表示的,即ExplicitVREndian。由于是小端字節(jié)序,首先應(yīng)交換字節(jié)順序。然后再按照VR的屬性讀取數(shù)據(jù)元值域的值。此外,要特別注意數(shù)據(jù)元〔0002,0010〕,該數(shù)據(jù)元的值確定了文件的傳輸語法,后面各組數(shù)據(jù)元的編碼都是由傳輸語法來決定的。③由于要經(jīng)常進(jìn)行數(shù)據(jù)元值的讀取,可以設(shè)計(jì)一些VR值讀取函數(shù),方便函數(shù)的調(diào)用。如VR為US、DS,那么讀取函數(shù)為readUS(),readDs()。④像素?cái)?shù)據(jù)元〔7FE0,0010〕里的像素?cái)?shù)據(jù)一般都是16位或者12位的,可以通過斜率變換和窗口變換將原始數(shù)據(jù)轉(zhuǎn)換成8位灰度數(shù)據(jù)。變量定義及初始化翻開一個(gè)DICOM文件按ExplicitLittleEndian讀取數(shù)據(jù)元〔0002,0010〕,確定后續(xù)數(shù)據(jù)元傳輸語法按上一步驟確定的傳輸語法讀取數(shù)據(jù)元,并將數(shù)據(jù)存入先前定義的變量,然后關(guān)閉文件將〔7EF0,0010〕的圖像數(shù)據(jù)轉(zhuǎn)換為8位灰度翻開一空白文件,按BMP格式將8位灰度數(shù)據(jù)連同文件頭、信息頭和顏色表寫入空白文件DICOM到BMP格式轉(zhuǎn)換完畢圖3.5DICOM與BMP格式轉(zhuǎn)換流程3.3.2轉(zhuǎn)換類的定義在圖像處理系統(tǒng)的開發(fā)過程中,設(shè)計(jì)了一個(gè)實(shí)現(xiàn)DICOM到BMP格式轉(zhuǎn)換的類CDicomToBMP。該類對(duì)圖像操作中的一些數(shù)據(jù)和方法進(jìn)行了封裝。ClassCDicomBMPDlg:publicCDialog{//ConstructionPublic: CDicomBMPDlg(CWnd*pParent=NULL); //standardconstructor//DialogData//{{AFX_DATA(CDicomBMPDlg)enum{IDD=IDD_DICOMBMP_DIALOG};int m_nConvertMode;//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CDicomBMPDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDVsupport//}}AFX_VIRTUALpublic: //ReusableDICOMfilereadingmethods. //Purposefullymadestatic,withoutdependencyonmembervariables.staticvoidremoveTailingSpace(char*pszStr);//去除空格;staticvoidSwapWord(char*pArray,intnWords);//交換字節(jié);staticvoidSwapDWord(char*pArray,intnDWords);//交換雙字節(jié);staticintreadUS(FILE*fp,DATA_ENDIANnDataEndian);//讀無符號(hào)16位整數(shù);staticlongintreadLength(FILE*fp,BOOLbImplicitVR,DATA_ENDIANnDataEndian);//讀取值域長(zhǎng)度;staticintreadIS(FILE*fp,BOOLbImplicitVR,DATA_ENDIANnDataEndian);//讀取十進(jìn)制整數(shù)字符;staticintreadString(FILE*fp,char*pszStr,BOOLbImplicitVR,DATA_ENDIANnDataEndian);//讀取字符串;staticfloatreadDS(FILE*fp,BOOLbImplicitVR,DATA_ENDIANnDataEndian);//讀取固定小數(shù)和浮點(diǎn)數(shù)字字符串;staticchar*convertTo8Bit(char*pData,longintnNumPixels,BOOLbSigned,shortnHighBit,floatfRescaleSlope,floatfRescaleIntercept,floatfWindowCenter,floatfWindowWidth);//將圖像數(shù)據(jù)轉(zhuǎn)換為8位數(shù)據(jù);//Implementationprotected: HICONm_hIcon;intm_nFileFormat; CStringm_strFileName; CStringm_strFileDir;voidConvertDicomToBMP();intWriteBMPFile(char*pData,intnFrameSize,shortnCols,shortnRows,intnBytesP,char*pszPhotometric,intnFrameNum=0);在上面類的定義中,類CDicomBMP派生于基類Cobject,在VC++中,只有派生于Cobject基類的才有動(dòng)態(tài)創(chuàng)立的功能。類的保護(hù)成員變量m_pFile存放格式轉(zhuǎn)換后所得的BMP文件的文件頭指針,以實(shí)現(xiàn)BMP文件的顯示。m_pData、m_nRows、m_nCols存放圖像的根本參數(shù),它們對(duì)于外界上是不可見的。成員函數(shù)ConvertDicomBMP()將實(shí)現(xiàn)類的主要功能,是該類中最重要的函數(shù)之一。在讀取DICOM文件時(shí),經(jīng)常會(huì)遇到字節(jié)順序的調(diào)換,所以設(shè)計(jì)了兩個(gè)函數(shù)SwapWord()和SwapDWord()來方便函數(shù)的調(diào)用。為了方便各類數(shù)據(jù)元值的讀取,設(shè)計(jì)了如readUS(),readLength()等函數(shù)。另外,convertTo8Bit()函數(shù)將把16位或12位的圖像數(shù)據(jù)轉(zhuǎn)換成8位灰度數(shù)據(jù)。WriteBMPFile()函數(shù)把轉(zhuǎn)換為8位的圖像數(shù)據(jù)和位圖文件頭、信息頭、顏色表一起寫入BMP文件。轉(zhuǎn)換算法下面給出函數(shù)ConvertDicomToBMP〔〕的算法和一些具體代碼。函數(shù)的算法為:①變量定義及初始化;②翻開文件,假設(shè)成功,轉(zhuǎn)③,假設(shè)失敗,那么退出;③定位文件指針,從當(dāng)前指針開始往后讀取2個(gè)字節(jié),判斷是否為大端字節(jié)序列,假設(shè)是,那么交換字節(jié),假設(shè)為小端字節(jié),那么轉(zhuǎn)4;④選擇數(shù)據(jù)元組號(hào),假設(shè)gTag=0002,轉(zhuǎn)⑤,gTag=0028,轉(zhuǎn)⑥,gTag=7EF0,轉(zhuǎn)⑦,gTag為其它,那么返回③;⑤判斷0002組是否已處理完,假設(shè)未處理完,那么從當(dāng)前指針開始往后讀取2個(gè)字節(jié)存入元素號(hào)變量,假設(shè)元素號(hào)為0010,那么讀取該數(shù)據(jù)元值,確定傳輸語法,并設(shè)已處理完標(biāo)志,返回③,假設(shè)元素號(hào)為其它,直接返回③;⑥判斷0028組是否已處理完,假設(shè)未處理完,那么從當(dāng)前指針開始往后讀取2個(gè)字節(jié)存入元素號(hào)變量,判斷元素號(hào)的值,進(jìn)入各元素號(hào)的分支,讀取數(shù)據(jù)存入相應(yīng)變量,在將1053號(hào)讀取完后,設(shè)已處理完標(biāo)志。從每一分支退出后,均返回③;⑦判斷7EF0組是否已處理完,假設(shè)未處理完,那么從當(dāng)前指針開始往后讀取2個(gè)字節(jié)存入元素號(hào)變量,假設(shè)元素號(hào)為0010,那么讀取〔7EF0,0010〕像素?cái)?shù)據(jù)元,返回③,假設(shè)元素號(hào)為其它,直接返回③;⑧關(guān)閉原文件。將上一步中讀取的像素?cái)?shù)據(jù)轉(zhuǎn)換成8位灰度數(shù)據(jù);⑨創(chuàng)立一空文件,按位圖格式將文件頭、信息頭、顏色表項(xiàng)和上一步驟得到的8位數(shù)據(jù)寫入空文件。函數(shù)實(shí)現(xiàn)的代碼:voidCDicomBMPDlg::ConvertDicomToBMP(){shortintnCols=0,nRows=0;//圖像的行數(shù)和列數(shù);shortintnBitsAllocated;//圖像數(shù)據(jù)的分配位數(shù);shortintnSamplesPerPixel=1;//每個(gè)像素的采樣次數(shù); shortintnHighBit=0;//圖像數(shù)據(jù)的高位; floatfWindowWidth=0,fWindowCenter=0,fRescaleSlope=1,fRescaleIntercept=0;//窗位特征; BOOLbIsSigned=FALSE; BOOLbGroup2Done=FALSE,bGroup28Done=FALSE,bPixelDataDone=FALSE;intnBytesP=0;//每像素所占的字節(jié)數(shù); intnFrameSize=0;//每幀圖像的大小; longintnLength;//圖像總字節(jié)數(shù); constchar*pszFileName=m_strFileName.GetBuffer(3); charszPhotometric[32]="",szTemp[32]="",szTransferSyntaxUID[80]="";//存儲(chǔ)傳輸語法的字符數(shù)組;BOOLbImplicitVR=TRUE;//是否為隱式表示值; COMPRESSION_MODEnCompressionMode=COMPRESS_NONE;//壓縮模式; DATA_ENDIANnDataEndian=LITTLE_ENDIAN;//初始值為小端字節(jié)序; inti; intnBytes;FILE*fp;//原文件指針;char*pData=0;//指向圖像數(shù)據(jù)的指針;shortintgTag,eTag;//標(biāo)簽的組號(hào)和元素號(hào);intnNumFrames=1;//幀數(shù),初始值為1;函數(shù)的開始定義了一些變量,用于存儲(chǔ)圖像根本參數(shù)和圖像數(shù)據(jù)。fp=fopen(pszFileName,"rb");//翻開文件;if(!fp)//判斷是否翻開;{AfxMessageBox("Failedtoopenfileforread.");return;}while(fread(&gTag,sizeof(short),1,fp)==1){ if(nDataEndian==BIG_ENDIAN)//判斷字節(jié)順序; SwapWord((char*)&gTag,1);switch(gTag)//實(shí)現(xiàn)組號(hào)判斷;{ case0x0002://Metaheader. if(bGroup2Done) break; fread(&eTag,sizeof(short),1,fp);…… bGroup2Done=TRUE;//處理標(biāo)志; break; } break;上述為文件的讀取。程序采用了循環(huán)結(jié)構(gòu)和多支選擇結(jié)構(gòu)。首先,翻開文件,如失敗那么返回失敗信息;接著,用一個(gè)whiledo結(jié)構(gòu)反復(fù)的讀取文件,在循環(huán)體內(nèi),先用條件語句判斷字節(jié)順序,假設(shè)為大端字節(jié)序,那么交換。然后進(jìn)入嵌套的多支選擇結(jié)構(gòu),外層switch結(jié)構(gòu)實(shí)現(xiàn)組號(hào)判別,內(nèi)層結(jié)構(gòu)實(shí)現(xiàn)元素號(hào)判別。上面的程序?qū)?shù)據(jù)元〔0002,0010〕進(jìn)行判別來確定該文件采用的什么傳輸語法。變量bGroup2Done作為處理標(biāo)志,假設(shè)bGroup2Done=TRUE,程序?qū)⒅苯犹鰏witch結(jié)構(gòu),進(jìn)入下一次循環(huán)。case0x0008://特征參數(shù)組fread(&eTag,sizeof(short),1,fp); if(nDataEndian==BIG_ENDIAN) SwapWord((char*)&eTag,1);if((eTag==0x0005)||(eTag==0x0008)) bGroup2Done=TRUE; break;0008組作為特征參數(shù)組,與圖像信息沒有聯(lián)系。case0x0028://圖像信息參數(shù)組fread(&eTag,sizeof(short),1,fp);if(bGroup28Done) break;if(nDataEndian==BIG_ENDIAN) SwapWord((char*)&eTag,1);switch(eTag){……}break;上述是圖像信息參數(shù)組的讀取。圖像信息參數(shù)組的相關(guān)圖像信息已讀取到內(nèi)存變量中了,這里有一些關(guān)于數(shù)據(jù)元值讀取的函數(shù)://讀取無符號(hào)16位整數(shù)intCDicomBMPDlg::readUS(FILE*fp,DATA_ENDIANnDataEndian){……return(int)nVal;}//讀取值域長(zhǎng)度longintCDicomBMPDlg::readLength(FILE*fp,BOOLbImplicitVR,DATA_ENDIANnDataEndian){…… returnnValLength;}//讀取十進(jìn)制整數(shù)字符intCDicomBMPDlg::readIS(FILE*fp,BOOLbImplicitVR,DATA_ENDIANnDataEndian){…… returnnVal;}//讀取固定小數(shù)和浮點(diǎn)數(shù)字符串floatCDicomBMPDlg::readDS(FILE*fp,BOOLbImplicitVR,DATA_ENDIANnDataEndian){…… returnfVal;}//讀取字符串intCDicomBMPDlg::readString(FILE*fp,char*pszStr,BOOLbImplicitVR,DATA_ENDIANnDataEndian){…… return0;}下面程序?yàn)閳D像數(shù)據(jù)的讀取。case0x7fe0:fread(&eTag,sizeof(short),1,fp); if(bPixelDataDone) break; if(nDataEndian==BIG_ENDIAN) SwapWord((char*)&eTag,1);if(eTag==0x0010){…… } if(pData) break;//Wearedone.}fclose(fp);到此為止,圖像數(shù)據(jù)已經(jīng)被讀取到字符指針pData所指向的內(nèi)存里。圖像數(shù)據(jù)有不同的編碼格式,如自然格式、RLE壓縮格式、JPEGLOSSY壓縮格式等。本文只給出了自然格式的圖像數(shù)據(jù)讀取。數(shù)據(jù)讀取完畢,關(guān)閉文件。DICOM圖像數(shù)據(jù)一般是12位或16位的,要轉(zhuǎn)換成BMP位圖,還應(yīng)進(jìn)行移位、截取、窗位變換等。成員函數(shù)convertTo8Bit()將指針pData指向的圖像是數(shù)據(jù)轉(zhuǎn)換成8位灰度圖像數(shù)據(jù),該成員函數(shù)的參數(shù)已從0028組的數(shù)據(jù)元里讀取。函數(shù)定義和實(shí)現(xiàn)的程序如下:char*CDicomBMPDlg::convertTo8Bit(char*pData,longintnNumPixels,BOOLbIsSigned,shortnHighBit, floatfRescaleSlope,floatfRescaleIntercept, floatfWindowCenter,floatfWindowWidth){…… } return(char*)pNewData;接下來是將轉(zhuǎn)換后的8位灰度圖像數(shù)據(jù)寫入BMP位圖文件。int CDicomBMPDlg::WriteBMPFile(char*pData,intnFrameSize,shortnCols,shortnRows,intnBytesP,char*pszPhotometric,intnFrameNum){BITMAPFILEHEADERbf;//文件頭; BITMAPINFOHEADERbi;//文件信息頭; intnPaletteSize=sizeof(RGBQUAD)*256;//調(diào)色板;char/*szBMPFileName[512],*/*cc; FILE*fp;…… } fclose(fp);return0;}以上列出的函數(shù)簡(jiǎn)要描述了從DICOM圖像數(shù)據(jù)到BMP數(shù)據(jù)的轉(zhuǎn)換過程。該轉(zhuǎn)換過程大致分為三個(gè)局部 :文件讀取,包括圖像根本參數(shù)信息、圖像數(shù)據(jù)的讀?。粓D像數(shù)據(jù)的變換:12或16位DICOM圖像數(shù)據(jù)轉(zhuǎn)換為8位灰度數(shù)據(jù);將變換后的8位圖像數(shù)據(jù)連同位圖文件頭、信息頭、顏色表一起寫入BMP位圖文件。第四章圖像顯示經(jīng)過前面的格式轉(zhuǎn)換后,DICOM圖像的顯示問題也就轉(zhuǎn)換為BMP位圖的顯示問題,BMP位圖在Windows環(huán)境下的顯示非常簡(jiǎn)單,但其顯示技術(shù)是數(shù)字圖像編程的根底,下面介紹一下位圖在Windows環(huán)境下的顯示原理及方法。4.1位圖原理4.1.1DDB位圖DDB位圖即設(shè)備相關(guān)位圖,又稱GDI位圖。它依賴于設(shè)備與MFC中的Cbitmap類相對(duì)應(yīng),它們?cè)趦?nèi)存中的結(jié)構(gòu)和位置依賴于管理它的設(shè)備驅(qū)動(dòng)程序。DDB不包含顏色信息,顯示圖像依賴于系統(tǒng)硬件,它的優(yōu)點(diǎn)是顯示簡(jiǎn)單、迅速,但也因?yàn)橐蕾囉谠O(shè)備,使得這種位圖不能通過磁盤或其它媒介與其它計(jì)算機(jī)實(shí)現(xiàn)文件共享,限制了它的應(yīng)用。結(jié)構(gòu)BITMAP定義了DDB位圖的類型、寬度、高度、顏色格式和像素位置。該結(jié)構(gòu)在Windows中定義如下[11]:TypedefstructtagBITMAP{IntbmType;//位圖類型,必須設(shè)置為0;IntbmWidth;//位圖高度;IntbmHeight;//位圖寬度;IntbmWidthBytes;//位圖中每一掃描行中的字節(jié)數(shù);BYTEbmPlanes;//顏色層數(shù);BYTEbmBitsPixel;//每一像素所占的位數(shù);VoidFAR*bmBits;//存放像素值內(nèi)存塊的地址;}BITMAP;圖形設(shè)備接口GDI,組成了Windows操作系統(tǒng)的核心局部。GDI管理Windows程序的所有圖形輸出。也就是說GDI提供高層繪圖函數(shù),這些函數(shù)無論根底硬件如何,都能夠生成相同結(jié)果。將圖形函數(shù)和硬件分開,能夠使程序員無須考慮硬件支持,就能生成有趣的圖形。設(shè)備上下文DC,是由GDI創(chuàng)立的用來代表設(shè)備連接的數(shù)據(jù)結(jié)構(gòu)。Windows的設(shè)備無關(guān)性使我們無法直接對(duì)硬件進(jìn)行操作,因此必須借助它來連接應(yīng)用程序和設(shè)備驅(qū)動(dòng)程序,以便實(shí)現(xiàn)諸如訪問內(nèi)存等功能。4.1.2DIB位圖DIB位圖是一種與設(shè)備無關(guān)的位圖。它可以在不同的機(jī)器或系統(tǒng)中顯示位圖所固有的圖像。與DDB相比,DIB是一種外部的位圖格式,DIB之所以獨(dú)立于設(shè)備,是因?yàn)樗艘粋€(gè)名為RGBQUAD的結(jié)構(gòu),描述了DIB位圖對(duì)應(yīng)的邏輯調(diào)色板的顏色表,其像素值是該調(diào)色板中的顏色索引值。當(dāng)一幅DIB位圖傳輸?shù)搅硪慌_(tái)計(jì)算機(jī)時(shí),該計(jì)算機(jī)顯示它時(shí)只需要根據(jù)這幅DIB的顏色表“按圖索驥〞就行了,而不必關(guān)心是否與當(dāng)前的硬件配置相吻合。經(jīng)常存儲(chǔ)為以BMP為后綴的位圖文件〔有時(shí)也以DIB為后綴〕。DIB位圖還支持圖像數(shù)據(jù)的壓縮。4.2位圖的顯示方法方法一:把位圖作為一種資源包含在可執(zhí)行模塊中這是一種最簡(jiǎn)單的方法,也是最不靈活的方法,在編程階段就已經(jīng)把要處理的位圖給固定下來,程序運(yùn)行時(shí)沒有動(dòng)態(tài)選擇能力,簡(jiǎn)單表現(xiàn)為屏蔽掉了文件格式信息,只要把位圖文件作為資源插入到工程中,以后的處理都只跟資源ID有關(guān)。如果在程序中需要的是假設(shè)干固定的位圖,資源方式包含在可執(zhí)行模塊中是一種很好的選擇,它減少了文件個(gè)數(shù),表達(dá)了整體性。顯示實(shí)現(xiàn)的具體步驟:1.創(chuàng)立位圖對(duì)象HBITMAPhBmp=::LoadBitmap()2.獲得位圖描述結(jié)構(gòu)BITMAPbitmap;GetObject()3.選入內(nèi)存設(shè)備上下文HDChdc=::GetDC()HDChMeDC=::CreateCompati

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論