醫(yī)學(xué)信息集成標(biāo)準(zhǔn)與技術(shù) 課件 第三章 fo-dicom類(lèi)庫(kù)_第1頁(yè)
醫(yī)學(xué)信息集成標(biāo)準(zhǔn)與技術(shù) 課件 第三章 fo-dicom類(lèi)庫(kù)_第2頁(yè)
醫(yī)學(xué)信息集成標(biāo)準(zhǔn)與技術(shù) 課件 第三章 fo-dicom類(lèi)庫(kù)_第3頁(yè)
醫(yī)學(xué)信息集成標(biāo)準(zhǔn)與技術(shù) 課件 第三章 fo-dicom類(lèi)庫(kù)_第4頁(yè)
醫(yī)學(xué)信息集成標(biāo)準(zhǔn)與技術(shù) 課件 第三章 fo-dicom類(lèi)庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩173頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章fo-dicom類(lèi)庫(kù)實(shí)驗(yàn)中的幾個(gè)問(wèn)題私有數(shù)據(jù)元素VM:1,1-3,3~3n怎么用通配符的Tag:3.1概述FellowOakDicom(fo-dicom)是一個(gè)開(kāi)源的C#語(yǔ)言編寫(xiě)的DICOM類(lèi)庫(kù),提供對(duì)DICOM數(shù)據(jù)元素與數(shù)據(jù)集、消息服務(wù)元素、服務(wù)類(lèi)、文件、圖像顯示等的支持。fo-dicom主要有以下特點(diǎn)。(1)目標(biāo)平臺(tái)為.NETStandard2.0,包括.NETFramework4.6.2、.NETCore6.0和7.0。(2)被存儲(chǔ)為DICOM數(shù)據(jù)字典。(3)高性能,完全支持async/await異步API。(4)能實(shí)現(xiàn)JPEG(含lossless)、JPEG-LS、JPEG2000及RLE壓縮算法(通過(guò)附加包)。(5)按需加載,支持極大數(shù)據(jù)集。(6)具有平臺(tái)特定的圖像渲染。(7)JSON/XML導(dǎo)入、導(dǎo)出。(8)支持匿名。(9)開(kāi)源,MicrosoftPublicLicense(MS-PL)。3.1.1主要特點(diǎn)(1)目標(biāo)平臺(tái)為.NETStandard2.0,包括.NETFramework4.6.2、.NETCore6.0和7.0。(2)被存儲(chǔ)為DICOM數(shù)據(jù)字典。(3)高性能,完全支持async/await異步API。(4)能實(shí)現(xiàn)JPEG(含lossless)、JPEG-LS、JPEG2000及RLE壓縮算法(5)按需加載,支持極大數(shù)據(jù)集。(6)具有平臺(tái)特定的圖像渲染。(7)JSON/XML導(dǎo)入、導(dǎo)出。(8)支持匿名。(9)開(kāi)源,MicrosoftPublicLicense(MS-PL)。3.1.2fo-dicom包包(Package)描

述fo-dicom包含解析器、服務(wù)和工具的核心包fo-dicom.Codecs跨平臺(tái)DICOM編解碼庫(kù),EfferentHealth開(kāi)發(fā)fo-dicom.Imaging.Desktop渲染為位圖的System.Drawing庫(kù)fo-dicom.Imaging.ImageSharp能用于平臺(tái)無(wú)關(guān)渲染的ImageSharp庫(kù)fo-dicom.NLog使fo-dicom能用NLog記錄日志的.NET連接器3.1.3fo-dicom核心程序集程序集(Assembly)描

述FellowOakDicomDICOM核心類(lèi)FellowOakDicom.ImagingDICOM圖像相關(guān)類(lèi)FellowOakDicom.Imaging.AlgorithmsDICOM圖像算法類(lèi)FellowOakDicom.Imaging.CodecDICOM圖像編解碼類(lèi)FellowOakDicom.Imaging.Codec.JpegDICOM圖像JPEG編解碼類(lèi)FellowOakDicom.Imaging.Codec.JpegLosslessDICOM圖像JPEGLossless編解碼類(lèi)FellowOakDicom.Imaging.LUTDICOM圖像查找表類(lèi)FellowOakDicom.Imaging.MathematicsDICOM圖像運(yùn)算相關(guān)類(lèi)FellowOakDicom.Imaging.ReconstructionDICOM圖像重建相關(guān)類(lèi)FellowOakDicom.Imaging.RenderDICOM圖像渲染相關(guān)類(lèi)程序集(Assembly)描

述FellowOakDicom.IODICOM輸入輸出類(lèi)FellowOakDicom.IO.BufferDICOM輸入輸出緩存類(lèi)FellowOakDicom.IO.ReaderDICOM輸入輸出流讀出類(lèi)FellowOakDicom.IO.WriterDICOM輸入輸出流寫(xiě)入類(lèi)FellowOakDicom.Log日志相關(guān)類(lèi)FellowOakDicom.MediaDICOM介質(zhì)存儲(chǔ)相關(guān)類(lèi)FellowOakDicom.NetworkDICOM網(wǎng)絡(luò)通信相關(guān)類(lèi)FellowOakDicom.Network.ClientDICOM網(wǎng)絡(luò)通信相關(guān)類(lèi)FellowOakDicom.Network.TLSDICOM傳輸層安全相關(guān)類(lèi)FellowOakDicom.PrintingDICOM打印相關(guān)類(lèi)FellowOakDicom.Serialization串行化相關(guān)類(lèi)FellowOakDicom.StructuredReport結(jié)構(gòu)化報(bào)告相關(guān)類(lèi)FellowOakDicom.Tools工具類(lèi)集合3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.1DicomTag類(lèi)用(組號(hào),元素號(hào))一對(duì)16位數(shù)唯一確定一個(gè)數(shù)據(jù)元素。偶數(shù)組號(hào)的為標(biāo)準(zhǔn)數(shù)據(jù)元素,奇數(shù)組號(hào)的為私有數(shù)據(jù)元素。Tag通過(guò)DicomTag類(lèi)合并實(shí)現(xiàn),用IsPrivate屬性判斷數(shù)據(jù)元素是否私有,用PrivateCreator屬性區(qū)分不同的私有創(chuàng)建者,為方便使用,DicomTag類(lèi)還實(shí)現(xiàn)了下列接口:IformattableIEquatable<DicomTag>IComparable<DicomTag>IComparable3.2.1DicomTag類(lèi)類(lèi)

別成

名類(lèi)

型描

述屬性Groupushort組號(hào)Elementushort元素號(hào)IsPrivatebool是否私有(Group.IsOdd())PrivateCreatorDicomPrivateCreator存取私有創(chuàng)建者對(duì)象DictionaryEntryDicomDictionaryEntry引用數(shù)據(jù)字典中對(duì)應(yīng)的數(shù)據(jù)元素方法ToStringstring獲取字符串表示ParseDicomTag將字符串參數(shù)解析為DicomTag,若解析出錯(cuò)則拋出異常Tag是一對(duì)數(shù)字,不易記憶,對(duì)于上層程序開(kāi)發(fā)來(lái)說(shuō)很不方便,在DicomTag類(lèi)中定義了所有數(shù)據(jù)元素的名稱(chēng)所對(duì)應(yīng)的對(duì)象常量,實(shí)現(xiàn)了按名引用如DicomTag.SpecificCharacterSet就對(duì)應(yīng)了Tag為(0008,0005)的DicomTag類(lèi)實(shí)例。由于數(shù)據(jù)元素?cái)?shù)量巨大且隨著版本號(hào)的變化而變化,所以這部分通過(guò)程序生成技術(shù)從數(shù)據(jù)字典文本中生成。publicpartialclassDicomTag{...///<summary>(0008,0001)VR=ULVM=1LengthtoEnd(RETIRED)</summary>publicreadonlystaticDicomTagLengthToEndRETIRED=newDicomTag(0x0008,0x0001);///<summary>(0008,0005)VR=CSVM=1-nSpecificCharacterSet</summary>publicreadonlystaticDicomTagSpecificCharacterSet=newDicomTag(0x0008,0x0005);...///<summary>(60xx,0010)VR=USVM=1OverlayRows</summary>publicreadonlystaticDicomTagOverlayRows=newDicomTag(0x6000,0x0010);///<summary>(60xx,0011)VR=USVM=1OverlayColumns</summary>publicreadonlystaticDicomTagOverlayColumns=newDicomTag(0x6000,0x0011);...}3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.2DicomMaskedTag類(lèi)數(shù)據(jù)元素中還有一些Tag帶有“x”,如(60xx,0010),每一個(gè)“x”代表任意一位十六進(jìn)制數(shù),稱(chēng)為通配Tag因?yàn)槠浣M號(hào)或元素號(hào)都不能直接存為16進(jìn)制短整型,所以其解析比較等操作均需特殊處理,單獨(dú)用DicomMaskedTag類(lèi)來(lái)處理3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.3DicomVM類(lèi)在數(shù)據(jù)字典中,VM列規(guī)定了某一數(shù)據(jù)元素是否允許多值及值的個(gè)數(shù)限定范圍,如“1”“1-3”“2-n”“3-3n”等,用DicomVM類(lèi)實(shí)現(xiàn)。屬性Minimum表示最小值,屬性Multiplicity乘以Maximum表示最大值三個(gè)屬性均為int類(lèi)型,“n”就用int.MaxValue常量(2147483647)表示。DicomVM類(lèi)還提供了Parse和ToString方法實(shí)現(xiàn)字符串與數(shù)字的轉(zhuǎn)換內(nèi)置的字段_vm用來(lái)避免重復(fù)DicomVM類(lèi)還定義了各種VM常量publicstaticreadonlyDicomVMVM_1=DicomVM.Parse("1");publicstaticreadonlyDicomVMVM_1_2=DicomVM.Parse("1-2");...publicstaticreadonlyDicomVMVM_3_n=DicomVM.Parse("3-n");publicstaticreadonlyDicomVMVM_3_3n=DicomVM.Parse("3-3n");...3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.4DicomUID類(lèi)UID規(guī)定了DICOM術(shù)語(yǔ)、傳輸語(yǔ)法、SOP類(lèi)、服務(wù)類(lèi)等的唯一標(biāo)識(shí)符,是數(shù)據(jù)字典的組成部分fo-dicom設(shè)計(jì)了DicomUID類(lèi)用來(lái)保存UID數(shù)據(jù)字典類(lèi)

別成

名類(lèi)

型描

述字段_uidsIDictionary<string,DicomUID>UID數(shù)據(jù)字典,對(duì)應(yīng)DicomUID對(duì)象屬性RootUIDstring分配UID的根UIDstring唯一標(biāo)識(shí)符,綁定私有字段_uids,只讀Namestring名稱(chēng),綁定私有字段_name,只讀TypeDicomUidType類(lèi)別,綁定私有字段_type,枚舉DicomUidType取值有TransferSyntax、SOPClass、MetaSOPClass、ServiceClass、SOPInstance、ApplicationContextName、ApplicationHostingModel、CodingScheme、FrameOfReference、LDAP、MappingResource、ContextGroupName、UnknownIsRetiredbool是否已失效,綁定私有字段_retired,只讀StorageCategoryDicomStorageCategory存儲(chǔ)類(lèi)別,枚舉DicomStorageCategory取值有None、Image、PresentationState、StructuredReport、Waveform、Document、Raw、Other、Private、VolumeIsImageStoragebool存儲(chǔ)類(lèi)別是否為圖像IsVolumeStoragebool存儲(chǔ)類(lèi)別是否為容積類(lèi)

別成

名類(lèi)

型描

述方法Registervoid向數(shù)據(jù)字典中添加DicomUID對(duì)象GenerateDicomUID為SOP實(shí)例分配一隨機(jī)UID并創(chuàng)建對(duì)象AppendDicomUID為SOP實(shí)例創(chuàng)建一順序UID對(duì)象IsValidUidbool判斷參數(shù)傳入的UID是否符合語(yǔ)法ParseDicomUID在UID數(shù)據(jù)字典中查找字符串參數(shù)指定的UID對(duì)象,返回對(duì)象;如果找不到,則返回Unknown對(duì)象GetHashCodeint獲取UID的哈希值ToStringstring以名稱(chēng)[UID]格式返回字符串UID是一串?dāng)?shù)字,對(duì)于上層程序開(kāi)發(fā)來(lái)說(shuō)很不方便,因此在DicomUID類(lèi)中定義了所有數(shù)據(jù)字典中UID名稱(chēng)對(duì)應(yīng)的對(duì)象常量,實(shí)現(xiàn)了按名引用如DicomUID.Verification就對(duì)應(yīng)了UID為“1.2.840.10008.1.1”驗(yàn)證SOP類(lèi)的DicomUID對(duì)象常量。在構(gòu)造函數(shù)中把所有DicomUID對(duì)象常量以UID為關(guān)鍵字添加到_uids數(shù)據(jù)字典中publicpartialclassDicomUID{...///<summary>SOPClass:VerificationSOPClass</summary>publicreadonlystaticDicomUIDVerification=newDicomUID( "1.2.840.10008.1.1", "VerificationSOPClass", DicomUidType.SOPClass, false);///<summary>TransferSyntax:ImplicitVRLittleEndian</summary>publicreadonlystaticDicomUIDImplicitVRLittleEndian=newDicomUID( "1.2.840.10008.1.2", "ImplicitVRLittleEndian:DefaultTransferSyntaxforDICOM", DicomUidType.TransferSyntax, false);...}類(lèi)

實(shí)

例屬

性UIDNameTypeIsRetiredImplicitVRLittleEndian1.2.840.10008.1.2ImplicitVRLittleEndian:DefaultTransferSyntaxforDICOM.TransferSyntaxfalseExplicitVRLittleEndian1.2.840.1000ExplicitVRLittleEndian.TransferSyntaxfalseExplicitVRBigEndianRetired1.2.840.1000ExplicitVRBigEndian(Retired).TransferSyntaxtrueDeflatedExplicitVRLittleEndian1.2.840.1000.99DeflatedExplicitVRLittleEndian.TransferSyntaxfalseJPEGBaseline11.2.840.1000.50JPEGBaseline(Process1):DefaultTransferSyntaxforLossyJPEG8BitImageCompression.TransferSyntaxfalse…………3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.5DicomTransferSyntax類(lèi)傳輸語(yǔ)法規(guī)定了DICOM字節(jié)順序是BE還是LE、值表示法是顯式還是隱式,以及采用什么壓縮算法等數(shù)據(jù)元素編解碼基本問(wèn)題。數(shù)據(jù)字典中規(guī)定了每種傳輸語(yǔ)法的UID標(biāo)識(shí),以DicomTransferSyntax類(lèi)表示。DicomTransferSyntax類(lèi)中:字節(jié)順序?qū)傩訣ndian是Dicom.IO命名空間下處理字節(jié)順序的一個(gè)工具類(lèi)只有一個(gè)bool變量_isBigEndian,定義了Big、Little、LocalMachine、Network

4個(gè)Endian對(duì)象常量,各種數(shù)值類(lèi)型的Swap方法用來(lái)改變字節(jié)順序。類(lèi)

別成

名類(lèi)

型描

述字段EntriesIDictionary<DicomUID,DicomTransferSyntax>傳輸語(yǔ)法類(lèi)對(duì)象的數(shù)據(jù)字典屬性UIDDicomUID唯一標(biāo)識(shí)符IsRetiredbool是否已失效IsExplicitVRbool是否顯式VRIsEncapsulatedbool是否封裝IsLossybool是否有損壓縮LossyCompressionMethodstring有損壓縮算法IsDeflatebool是否緊縮壓縮EndianEndian字節(jié)順序SwapPixelDatabool像素?cái)?shù)據(jù)是否要交換順序方法ToStringstring獲取傳輸語(yǔ)法名ParseDicomTransferSyntax從參數(shù)UID字符串得到傳輸語(yǔ)法對(duì)象RegisterDicomTransferSyntax注冊(cè)并返回UID指定的傳輸語(yǔ)法實(shí)例Unregisterbool通過(guò)傳輸語(yǔ)法實(shí)例或UID退出注冊(cè)QueryDicomTransferSyntax根據(jù)UID查詢(xún)傳輸語(yǔ)法實(shí)例LookupDicomTransferSyntax從參數(shù)UID得到傳輸語(yǔ)法對(duì)象類(lèi)中為每一種傳輸語(yǔ)法實(shí)例化了靜態(tài)對(duì)象,各實(shí)例的屬性取值見(jiàn)表3.7類(lèi)的構(gòu)造函數(shù)把這些靜態(tài)傳輸語(yǔ)法對(duì)象添加到了Entries數(shù)據(jù)字典中,以方便使用///<summary>ExplicitVRLittleEndian</summary>publicstaticDicomTransferSyntaxExplicitVRLittleEndian=newDicomTransferSyntax{UID=DicomUID.ExplicitVRLittleEndian,IsExplicitVR=true,Endian=Endian.Little};...///<summary>JPEG2000LossyImageCompression</summary>publicstaticDicomTransferSyntaxJPEG2000Lossy

=newDicomTransferSyntax{UID=DicomUID.JPEG2000,IsExplicitVR=true,IsEncapsulated=true,IsLossy=true,LossyCompressionMethod="ISO_15444_1",Endian=Endian.Little};...類(lèi)

實(shí)

例屬

性UID①I(mǎi)sRetiredIsExplicitVRIsEncapsulatedIsLossyLossyCompr-essionMethodEndianImplicitVRLittleEndian.ImplicitVRLittleEndianfalsefalsefalsefalse

.LittleExplicitVRLittleEndian.ExplicitVRLittleEndianfalsetruefalsefalse

.LittleExplicitVRBigEndian.ExplicitVRBigEndianRETIREDfalsetruefalsefalse

.BigDeflatedExplicitVRLittleEndian.DeflatedExplicitVRLittleEndianfalsetruefalsefalse

.LittleJPEGProcess1.JPEGBaseline1falsetruetruetrueISO_10918_1.LittleJPEGProcess2_4.JPEGExtended24falsetruetruetrueISO_10918_1.LittleJPEGProcess3_5Retired.JPEGExtended35RETIREDtruetruetruetrueISO_10918_1.LittleJPEGProcess6_8Retired.JPEGSpectralSelectionNonHierarchical68RETIREDtruetruetruetrueISO_10918_1.LittleJPEGProcess7_9Retired.JPEGSpectralSelectionNonHierarchical79RETIREDtruetruetruetrueISO_10918_1.LittleJPEGProcess10_12Retired.JPEGFullProgressionNonHierarchical1012RETIREDtruetruetruetrueISO_10918_1.LittleJPEGProcess11_13Retired.JPEGFullProgressionNonHierarchical1113RETIREDtruetruetruetrueISO_10918_1.Little…………3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.6DicomVR類(lèi)DicomVR類(lèi)定義了VR的描述結(jié)構(gòu),包括值表示法的固有屬性,以及不同傳輸語(yǔ)法下值表示法編解碼所需的屬性和方法,DicomVR類(lèi)屬性Code、Name、IsMultiValue、UnitSize、MaximumLength分別保存了VR的固有屬性屬性IsStringEncoded指明了該VR值域是否可以用(0008,0005)

SpecificCharacterSet數(shù)據(jù)元素指定的字符集編碼;屬性UnitSize用于OB、OD、OF、OL、OW等數(shù)組類(lèi)型的VR,指示該數(shù)組的每一個(gè)元素的字節(jié)數(shù)在隱式VR傳輸語(yǔ)法下值長(zhǎng)度域固定為4字節(jié)。顯式VR傳輸語(yǔ)法下值長(zhǎng)度域是否為2字節(jié)(否則跳過(guò)2字節(jié)0,值長(zhǎng)度域?yàn)?字節(jié)),設(shè)置了Is16bitLength屬性記錄DicomVR類(lèi)還具有方便使用的IsString屬性來(lái)區(qū)分值域是用字符串表示還是用二進(jìn)制數(shù)表示值域用二進(jìn)制數(shù)表示時(shí)屬性ByteSwap記載了改變字節(jié)順序時(shí)的交換字節(jié)數(shù)(除AT外均與UnitSize一致)屬性ValueType則指定了實(shí)際保存該VR值的C#數(shù)據(jù)類(lèi)型名。類(lèi)

別成

名類(lèi)

型描

述屬性CodestringVR代碼NamestringVR名稱(chēng)IsStringbool是否用字符串表示IsStringEncodedbool是否用特定字符集編碼字符串Is16bitLengthbool顯式VR傳輸語(yǔ)法下值長(zhǎng)度域是否為16位(2字節(jié))短整型IsMultiValuebool值域是否允許多個(gè)值PaddingValuebyte用來(lái)使值域?yàn)榕紨?shù)個(gè)字節(jié)的填充字符MaximunLengthuint單個(gè)值的最大長(zhǎng)度UnitSizeint固定長(zhǎng)度值類(lèi)型的每個(gè)值單元大小ByteSwapint改變字節(jié)順序時(shí)的交換字節(jié)數(shù),通常與UnitSize一致ValueTypeType類(lèi)型名StringValidatorAction<string>字符串驗(yàn)證器方法ToStringstring獲取該VR的字符串表示ParseDicomVR將字符串參數(shù)解析為DicomVRTryParsebool將字符串參數(shù)解析為DicomVR時(shí),若解析出錯(cuò)則拋出異常ValidateStringvoid調(diào)用驗(yàn)證器驗(yàn)證字符串例如,實(shí)例AE的聲明如下:publicstaticreadonlyDicomVRAE=newDicomVR{Code=DicomVRCode.AE,Name="ApplicationEntity",IsString=true,IsStringEncoded=false,Is16bitLength=true,IsMultiValue=true,PaddingValue=PadSpace,MaximumLength=16,UnitSize=1,ByteSwap=1,ValueType=typeof(string)};DicomVRCode靜態(tài)類(lèi)定義了34種VR常量字符串,方便枚舉使用publicstaticclassDicomVRCode{publicconststringAE="AE";///<summary>ApplicationEntity</summary>publicconststringAS="AS";///<summary>AgeString</summary>publicconststringAT="AT";///<summary>AttributeTag</summary>...publicconststringUS="US";///<summary>UnsignedShort</summary>publicconststringUT="UT";///<summary>UnlimitedText</summary>}類(lèi)實(shí)例屬

性Code①NameIsStringIsStringEncodedIs16bitLengthIsMultiValuePaddingValueMaximumLengthUnitSizeByteSwapValueTypeAE.AEApplicationEntitytruefalsetruetrue0x201611stringAS.ASAgeStringtruefalsetruetrue0x20411stringAT.ATAttributeTagfalsefalsetruetrue0x00442DicomTagCS.CSCodeStringtruefalsetruetrue0x201611stringDA.DADatetruefalsetruetrue0x20811datetimeDS.DSDecimalStringtruefalsetruetrue0x201611decimalDT.DTDateTimetruefalsetruetrue0x202611datetimeFD.FDFloatingPointDoublefalsefalsetruetrue0x00888doubleFL.FLFloatingPointSinglefalsefalsetruetrue0x00444floatIS.ISIntegerStringtruefalsetruetrue0x201211int…………3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.7數(shù)據(jù)字典類(lèi)DicomDictionaryEntry類(lèi)用來(lái)保存數(shù)據(jù)字典中的一行,屬性Tag、Name、Keyword、ValueRepresentations、ValueMultiplicity、IsRetired分別對(duì)應(yīng)數(shù)據(jù)字典中的一列。MaskTag是DicomMaskedTag類(lèi)的實(shí)例,用來(lái)保存通配Tag??梢酝ㄟ^(guò)構(gòu)造函數(shù)的參數(shù)得到各屬性的初始值,類(lèi)外部訪問(wèn)的各屬性是只讀的。publicsealedclassDicomDictionaryEntry{publicDicomTagTag{get;set;} //標(biāo)記publicDicomMaskedTagMaskTag{get;privateset;} //掩碼標(biāo)記publicstringName{get;privateset;} //數(shù)據(jù)元素名publicstringKeyword{get;privateset;} //關(guān)鍵字publicDicomVR[]ValueRepresentations{get;privateset;} //值表示法publicDicomVMValueMultiplicity{get;privateset;} //值個(gè)數(shù)范圍publicboolIsRetired{get;privateset;} //是否已失效...}DicomDictionary類(lèi)將數(shù)據(jù)元素分為3類(lèi)分別存儲(chǔ)標(biāo)準(zhǔn)數(shù)據(jù)元素,加載在數(shù)據(jù)字典_entry中帶有掩碼標(biāo)記的數(shù)據(jù)元素,加載在_masked列表中私有數(shù)據(jù)元素,每個(gè)創(chuàng)建者一個(gè)數(shù)據(jù)字典,通過(guò)_private數(shù)據(jù)字典索引到私有創(chuàng)建者字典數(shù)據(jù)字典的加載途徑如下:(1)通過(guò)顯式調(diào)用EnsureDefaultDictionariesLoaded方法加載內(nèi)置的XML格式數(shù)據(jù)字典文件及私有數(shù)據(jù)字典文件(可選)。(2)通過(guò)Load方法從指定的XML文件中加載數(shù)據(jù)字典;(3)通過(guò)Default屬性單次寫(xiě)入數(shù)據(jù)字典或讀取時(shí)隱式加載數(shù)據(jù)字典。類(lèi)別成

名類(lèi)

型描

述字段UnknownTagDicomDictionaryEntry未知Tag,靜態(tài)只讀字段,作為數(shù)據(jù)字典索引失敗的返回值PrivateCreatorTagDicomDictionaryEntry私有創(chuàng)建者數(shù)據(jù)元素,靜態(tài)只讀字段,作為元素號(hào)0x0001~0x00ff私有數(shù)據(jù)元素?cái)?shù)據(jù)字典索引的返回值_creatorsConcurrentDictionary私有創(chuàng)建者對(duì)象的數(shù)據(jù)字典_privateConcurrentDictionary私有創(chuàng)建者數(shù)據(jù)字典的數(shù)據(jù)字典_entryConcurrentDictionary標(biāo)準(zhǔn)數(shù)據(jù)元素的數(shù)據(jù)字典_keywordsConcurrentDictionary關(guān)鍵字?jǐn)?shù)據(jù)字典_maskedConcurrentBag<DicomDictionaryEntry>帶掩碼標(biāo)記的數(shù)據(jù)元素列表屬性DefaultDicomDictionary與_default字段綁定,存取默認(rèn)數(shù)據(jù)字典的引用PrivateCreatorDicomPrivateCreator與_privateCreator字段綁定,存取當(dāng)前私有創(chuàng)建者對(duì)象的引用索引器成

名類(lèi)

型描

述this[DicomTag]DicomDictionaryEntry通過(guò)DicomTag對(duì)象索引數(shù)據(jù)字典中對(duì)應(yīng)的數(shù)據(jù)元素this[DicomPrivateCreator]DicomDictionary通過(guò)DicomPrivateCreator對(duì)象索引到該私有創(chuàng)建者數(shù)據(jù)字典this[stringkeyword]Dicomtag用關(guān)鍵字查詢(xún)DicomTag對(duì)象方法Addvoid將數(shù)據(jù)元素對(duì)象添加到數(shù)據(jù)字典GetPrivateCreatorDicomPrivateCreator獲?。ㄈ舨淮嬖趧t先添加)參數(shù)字符串對(duì)應(yīng)的私有創(chuàng)建者對(duì)象Loadvoid通過(guò)DicomDictionaryReader對(duì)象從參數(shù)指定的XML文件中加載各個(gè)數(shù)據(jù)元素EnsureDefaultDictionariesLoadedDicomDictionary確保默認(rèn)DICOM數(shù)據(jù)字典加載成功GetEnumeratorIEnumerator<DicomDictionaryEntry>獲取枚舉器Add方法用來(lái)向數(shù)據(jù)字典中添加一條數(shù)據(jù)元素,至于添加到哪個(gè)數(shù)據(jù)字典是自動(dòng)處理的。索引器this[DicomTag]可通過(guò)DicomTag對(duì)象透明索引數(shù)據(jù)元素,無(wú)須關(guān)心具體在哪個(gè)數(shù)據(jù)字典中,如果返回UnknownTag,則表示索引失敗.3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.8數(shù)據(jù)元素類(lèi)數(shù)據(jù)元素是DICOM數(shù)據(jù)組織的基本單位。對(duì)數(shù)據(jù)元素的基本操作就是在傳輸語(yǔ)法的規(guī)定下進(jìn)行編碼和解碼。一個(gè)數(shù)據(jù)元素由標(biāo)記、值表示法(隱式傳輸語(yǔ)法下沒(méi)有這部分,由數(shù)據(jù)字典查得)、值長(zhǎng)度和值域四部分組成前三部分的編解碼完全由傳輸語(yǔ)法確定值域的編解碼比較復(fù)雜,除傳輸語(yǔ)法外,還與值表示法VR密切相關(guān),34種VR的編解碼方法都不相同,因此可以定義34種數(shù)據(jù)元素類(lèi)。1.?dāng)?shù)據(jù)元素類(lèi)體系DicomItem類(lèi)DicomSequence類(lèi)(SQ)DicomElement類(lèi)DicomAttributeTag類(lèi)(AT)DicomValueElement類(lèi)DicomSignedShort類(lèi)(SS)、DicomSignedLong類(lèi)(SL)、DicomSignedVeryLong類(lèi)(SV)、DicomUnsignedShort類(lèi)(US)、DicomUnsignedLong類(lèi)(UL)、DicomUnsignedVeryLong類(lèi)(UV)DicomFloatingPointSingle類(lèi)(FL)、DicomFloatingPointDouble類(lèi)(FD)、DicomOtherWord類(lèi)(OW)、DicomOtherLong類(lèi)(OL)、DicomOtherVeryLong類(lèi)(OV)、DicomOtherFloat類(lèi)(OF)、DicomOtherDouble類(lèi)(OD)DicomOtherByte類(lèi)(OB)DicomUnknown類(lèi)(UN)DicomStringElement類(lèi)DicomLongText類(lèi)(LT)、DicomShortText類(lèi)(ST)、DicomUniversalResource類(lèi)(UR)、DicomUnlimitedText類(lèi)(UT)DicomMultiStringElement類(lèi)DicomApplicationEntity類(lèi)(AE)、DicomAgeString類(lèi)(AS)、DicomCodeString類(lèi)(CS)、DicomDecimalString類(lèi)(DS)、DicomIntegerString類(lèi)(IS)、DicomLongString類(lèi)(LO)、DicomPersonName類(lèi)(PN)、DicomShortString類(lèi)(SH)、DicomUnlimitedCharacters類(lèi)(UC)、DicomUniqueIdentifier類(lèi)(UI)DicomDateElement類(lèi)DicomDate類(lèi)(DA)、DicomDateTime類(lèi)(DT)、DicomTime類(lèi)(TM)2.類(lèi)的成員DicomItem類(lèi)定義了DicomTag類(lèi)對(duì)象Tag屬性抽象只讀屬性ValueRepresentation強(qiáng)制各具體子類(lèi)返回其DicomVR對(duì)象重寫(xiě)ToString方法得到“TAGVRName”格式的字符串。2.類(lèi)的成員DicomElement類(lèi)為除SQ外的數(shù)據(jù)元素定義了IByteBuffer接口的Buffer屬性和Length屬性,用來(lái)保存值域抽象屬性Count從子類(lèi)得到值的個(gè)數(shù)抽象泛型方法Get<T>從子類(lèi)讀取值Validate方法驗(yàn)證值的個(gè)數(shù)是否超出VM規(guī)定的上下限。2.類(lèi)的成員DicomValueElement類(lèi)是一個(gè)泛型抽象類(lèi)實(shí)現(xiàn)了Count屬性計(jì)算Buffer.Size計(jì)算ValueRepresentation.UnitSize實(shí)現(xiàn)了Get<T>泛型方法,解碼返回:單個(gè)數(shù)值數(shù)值類(lèi)型的數(shù)組或者對(duì)應(yīng)的對(duì)象、結(jié)構(gòu)、字符串及其數(shù)組形式publicoverrideTGet<T>(intitem=-1){ if(item==-1)item=0; if(typeof(T)==typeof(object)){...//返回對(duì)象} if(typeof(T)==typeof(object[])){...//返回對(duì)象數(shù)組} if(typeof(T)==typeof(Tv)){...//返回Tv結(jié)構(gòu)} if(typeof(T)==typeof(Tv[])){...//返回Tv結(jié)構(gòu)數(shù)組} if(typeof(T)==typeof(string)){...//返回字符串} if(typeof(T)==typeof(string[])){...//返回字符串?dāng)?shù)組} if(typeof(T).GetTypeInfo().IsValueType){...//返回?cái)?shù)值類(lèi)型} thrownewInvalidCastException("Unabletoconvert...");//拋出異常}DicomStringElement類(lèi)定義了Encoding對(duì)象數(shù)組的屬性BufferEncodings和TargetEncodings;實(shí)現(xiàn)了Count只讀屬性(固定為1)定義了string類(lèi)型的StringValue只讀屬性,得到了去除填充字符的Buffer字符串實(shí)現(xiàn)了Get<T>方法對(duì)StringValue按照T返回字符串或字符串?dāng)?shù)組ValidateString方法調(diào)用了VR對(duì)象的ValidateString方法對(duì)值做字符串驗(yàn)證。DicomMultiStringElement類(lèi)擴(kuò)展了DicomStringElement類(lèi)增加了string[]類(lèi)型_values私有字段的存放值數(shù)量重寫(xiě)了Count屬性得到值的個(gè)數(shù)重寫(xiě)了Get<T>方法返回給定數(shù)組下標(biāo)的字符串ValidateString方法調(diào)用了VR對(duì)象的ValidateString方法對(duì)值做字符串驗(yàn)證。DicomDateElement類(lèi)定義了datetime[]類(lèi)型的_values私有字段定義了string[]類(lèi)型的DateFormats只讀屬性用來(lái)保存日期時(shí)間格式重寫(xiě)了Get<T>方法增加從Buffer中按照DateFormats格式解析出的datetime、datetime[]或DicomDateRange類(lèi)型的日期值。數(shù)據(jù)元素具體類(lèi)大部分的定義都只是在抽象類(lèi)的基礎(chǔ)上,簡(jiǎn)單地通過(guò)構(gòu)造函數(shù)向基類(lèi)傳遞參數(shù)實(shí)現(xiàn)ValueRepresentation只讀屬性得到DicomVR對(duì)象例如DicomOtherByte類(lèi)返回DicomVR.OB,DicomUnknown類(lèi)返回DicomVR.UN。少部分的數(shù)據(jù)元素具體類(lèi)改寫(xiě)了Get<T>方法和增加了一些必要的屬性3.DicomDataSet類(lèi)數(shù)據(jù)集是數(shù)據(jù)元素的有序集合,由DicomDataSet類(lèi)實(shí)現(xiàn)類(lèi)中組合了DicomItem對(duì)象集合_items,以容納包括SQ在內(nèi)的各種數(shù)據(jù)元素,_items被初始化為SortedDictionary<DicomTag,DicomItem>對(duì)象定義了Add、AddOrUpdate、Remove、Clear、Contains、GetXXX<T>等常用方法多個(gè)Get方法相關(guān)的還有TryGet方法,當(dāng)出現(xiàn)錯(cuò)誤時(shí)可拋出異常。DicomDataset擴(kuò)展類(lèi),新增了Clone、GetDateTime、EnumerateMasked、EnumerateGroup等方法類(lèi)

別成

名類(lèi)

型描

述字段_itemsIDictionary<DicomTag,DicomItem>容納數(shù)據(jù)集中數(shù)據(jù)元素的數(shù)據(jù)字典_syntaxDicomTransferSyntax傳輸語(yǔ)法屬性InternalTransferSyntaxDicomTransferSyntax與_syntax字段綁定,存取傳輸語(yǔ)法AutoValidatebool使能數(shù)據(jù)元素加入時(shí)的自動(dòng)驗(yàn)證方法AddDicomDataset將數(shù)據(jù)元素對(duì)象、數(shù)組或集合添加到數(shù)據(jù)集DoAddDicomDataset將數(shù)據(jù)元素對(duì)象、數(shù)組或集合添加到數(shù)據(jù)集AddOrUpdateDicomDataset將數(shù)據(jù)元素對(duì)象、數(shù)組或集合添加到數(shù)據(jù)集,若已存在則更新AddOrUpdatePixelDataDicomDataset將圖像像素?cái)?shù)據(jù)添加到對(duì)象為數(shù)據(jù)集的PixelData數(shù)據(jù)元素,若已存在則更新RemoveDicomDataset把指定Tag的若干數(shù)據(jù)元素從數(shù)據(jù)集中移除ClearDicomDataset清空數(shù)據(jù)集GetValue<T>T獲取Tag指定數(shù)據(jù)元素的值GetValueCountint獲取Tag指定數(shù)據(jù)元素的值的個(gè)數(shù)GetValueOrDefault<T>T獲取Tag指定數(shù)據(jù)元素的第幾個(gè)值,如果該值不存在則返回所提供的默認(rèn)值GetValues<T>T[]獲取Tag指定數(shù)據(jù)元素的值數(shù)組GetSingleValue<T>T獲取Tag指定數(shù)據(jù)元素的值,其VM必須是1類(lèi)

別成

名類(lèi)

型描

述方法GetSingleValueOrDefault<T>T獲取Tag指定數(shù)據(jù)元素的值,如果該值不存在則返回所提供的默認(rèn)值GetStringstring獲取Tag指定數(shù)據(jù)元素值的字符串表示GetDicomItem<T>T獲取指定Tag的數(shù)據(jù)元素GetSequenceDicomSequence獲取指定Tag的SQGetCodeItemDicomCodeItem獲取指定Tag的CodeItem對(duì)象GetReferencedSOPDicomReferencedSOP獲取指定Tag的ReferencedSOP對(duì)象GetMeasuredValueDicomMeasuredValue獲取指定Tag的MeasuredValue對(duì)象Validatevoid對(duì)數(shù)據(jù)集中所有數(shù)據(jù)元素做驗(yàn)證Containsbool檢查數(shù)據(jù)集中是否包含指定Tag的數(shù)據(jù)元素CopyToDicomDataset把指定Tag的數(shù)據(jù)元素的引用復(fù)制到目標(biāo)數(shù)據(jù)集ToStringstring顯示數(shù)據(jù)集中數(shù)據(jù)元素?cái)?shù)量統(tǒng)計(jì)值4.DicomSequence類(lèi)SQ值表示法規(guī)定了數(shù)據(jù)元素值域可由多個(gè)條目(Item)構(gòu)成,每個(gè)條目封裝一個(gè)子數(shù)據(jù)集(其中有若干數(shù)據(jù)元素,包括SQ數(shù)據(jù)元素),形成了一種嵌套的數(shù)據(jù)結(jié)構(gòu)。DicomSequence類(lèi)的設(shè)計(jì),有了DicomDataSet類(lèi)就比較簡(jiǎn)單了SQ的值域由多個(gè)條目構(gòu)成,每個(gè)條目可以用一個(gè)DicomDataSet對(duì)象來(lái)實(shí)現(xiàn)用IList<DicomDataset>類(lèi)型的Items屬性容納這些條目定義了GetEnumerator方法(枚舉訪問(wèn)Items)定義了Validate方法(對(duì)每個(gè)條目進(jìn)行驗(yàn)證)5.?dāng)?shù)據(jù)集遍歷類(lèi)上層應(yīng)用可以通過(guò)索引或枚舉器訪問(wèn)數(shù)據(jù)集及列表,但是在編碼、Dump時(shí)除了按序遍歷每一個(gè)數(shù)據(jù)元素,還需要把SQ數(shù)據(jù)元素的條目結(jié)構(gòu)反映出來(lái)fo-dicom設(shè)計(jì)了數(shù)據(jù)集遍歷提供類(lèi)DicomDatasetWalker和數(shù)據(jù)集遍歷用戶(hù)類(lèi)的接口IDicomDatasetWalkerIDicomDatasetWalker接口在強(qiáng)制約束數(shù)據(jù)集遍歷用戶(hù)類(lèi)時(shí),需要實(shí)現(xiàn)規(guī)定的數(shù)據(jù)集結(jié)構(gòu)遍歷事件處理方法實(shí)現(xiàn)這個(gè)接口的數(shù)據(jù)集遍歷用戶(hù)類(lèi)包括DicomDatasetWalker等publicinterfaceIDicomDatasetWalker{voidOnBeginWalk(); //遍歷開(kāi)始事件處理方法boolOnElement(DicomElementelement); //數(shù)據(jù)元素事件處理方法Task<bool>OnElementAsync(DicomElementelement); //異步數(shù)據(jù)元素事件處理方法boolOnBeginSequence(DicomSequencesequence); //列表開(kāi)始事件處理方法boolOnBeginSequenceItem(DicomDatasetdataset); //條目開(kāi)始事件處理方法boolOnEndSequenceItem(); //條目結(jié)束事件處理方法boolOnEndSequence(); //列表結(jié)束事件處理方法boolOnBeginFragment(DicomFragmentSequencefragment);//分段開(kāi)始事件處理方法boolOnFragmentItem(IByteBufferitem); //分段條目事件處理方法Task<bool>OnFragmentItemAsync(IByteBufferitem); //異步分段條目事件處理方法boolOnEndFragment(); //分段結(jié)束事件處理方法voidOnEndWalk(); //遍歷結(jié)束事件處理方法}DicomDatasetWalker類(lèi)是實(shí)際進(jìn)行數(shù)據(jù)集遍歷的提供類(lèi),把數(shù)據(jù)集的開(kāi)始、結(jié)束,每一個(gè)數(shù)據(jù)元素/列表的開(kāi)始、結(jié)束,每一個(gè)條目的開(kāi)始、結(jié)束事件都通過(guò)IDicomDatasetWalker接口通知數(shù)據(jù)集遍歷用戶(hù)類(lèi)進(jìn)行具體處理。定義了IEnumerable<DicomItem>類(lèi)型的私有字段_dataset保存構(gòu)造函數(shù)傳入的數(shù)據(jù)集定義了Walk方法遍歷數(shù)據(jù)集,先調(diào)用私有方法BuilderWalkQueue把數(shù)據(jù)集(特別是SQ)線性化為隊(duì)列items定義私有的BeginDicomSequenceItem類(lèi)、EndDicomSequenceItem類(lèi)、EndDicomSequence類(lèi)、DicomFragmentItem類(lèi)及EndDicomFragment類(lèi)等來(lái)插入SQ結(jié)構(gòu)標(biāo)記對(duì)象調(diào)用DoWalk私有方法從隊(duì)列中逐個(gè)訪問(wèn),觸發(fā)參數(shù)傳入的IDicomDatasetWalker對(duì)象的對(duì)應(yīng)接口方法類(lèi)中還提供了異步版本的WalkAsync方法和DoWalkAsync方法privatestaticvoidBuildWalkQueue(IEnumerable<DicomItem>dataset,Queue<DicomItem>items){foreach(varitemindataset){ //遍歷數(shù)據(jù)集if(itemisDicomElement){ //數(shù)據(jù)元素直接入列items.Enqueue(item);}elseif(itemisDicomFragmentSequence){ //分段列表varsq=itemasDicomFragmentSequence;items.Enqueue(item); //直接入列foreach(varfragmentinsq){ //遍歷各分段items.Enqueue(newDicomFragmentItem(fragment));//分段封裝對(duì)象入列}items.Enqueue(newEndDicomFragment()); //分段結(jié)束對(duì)象入列

}elseif(itemisDicomSequence){ //列表varsq=itemasDicomSequence;items.Enqueue(item); //入列foreach(varsqiinsq){ //遍歷列表各條目sqi.SetFallbackEncodings(dataset.GetEncodingsForSerialization());//設(shè)置編碼sqi.OnBeforeSerializing(); //串行化開(kāi)始事件items.Enqueue(newBeginDicomSequenceItem(sqi)); //列表?xiàng)l目開(kāi)始對(duì)象入列BuildWalkQueue(sqi,items); //嵌套創(chuàng)建條目隊(duì)列items.Enqueue(newEndDicomSequenceItem());//條目結(jié)束對(duì)象入列}items.Enqueue(newEndDicomSequence()); //列表結(jié)束對(duì)象入列}}}privatestaticvoidDoWalk(IDicomDatasetWalkerwalker,Queue<DicomItem>items){try{ walker.OnBeginWalk(); //遍歷開(kāi)始事件 while(items.Count>0){ //遍歷數(shù)據(jù)集 varitem=items.Dequueue(); //元素出隊(duì)列 if(itemisDicomElement){ //數(shù)據(jù)元素事件 walker.OnElement(itemasDicomElement); }elseif(itemisDicomFragmentSequence){ //分段列表開(kāi)始事件walker.OnBeginFragment(itemasDicomFragmentSequence);}elseif(itemisDicomFragmentItem){ //分段條目開(kāi)始事件walker.OnFragmentItem((itemasDicomFragmentItem).Buffer);}elseif(itemisEndDicomFragment){ //分段結(jié)束事件walker.OnEndFragment();}elseif(itemisDicomSequence){ //列表開(kāi)始事件walker.OnBeginSequence(itemasDicomSequence);}elseif(itemisBeginDicomSequenceItem){ //條目開(kāi)始事件walker.OnBeginSequenceItem((itemasBeginDicomSequenceItem).Dataset);}elseif(itemisEndDicomSequenceItem){ //條目結(jié)束事件walker.OnEndSequenceItem(); }elseif(itemisEndDicomSequence){ //列表結(jié)束事件walker.OnEndSequence(); }}walker.OnEndWalk(); //遍歷結(jié)束事件}catch(Exceptione){……}}3.2Dicom核心程序集3.2.1DicomTag類(lèi)3.2.2DicomMaskedTag類(lèi)3.2.3DicomVM類(lèi)3.2.4DicomUID類(lèi)3.2.5DicomTransferSyntax類(lèi)3.2.6DicomVR類(lèi)3.2.7數(shù)據(jù)字典類(lèi)3.2.8數(shù)據(jù)元素類(lèi)3.2.9文件類(lèi)3.2.9文件類(lèi)Dicom文件組成文件頭前導(dǎo)符DICM標(biāo)識(shí)頭元素?cái)?shù)據(jù)集數(shù)據(jù)元素1.DicomFileMetaInformation類(lèi)DicomFileMetaInformation類(lèi)是保存文件頭元素的類(lèi)繼承了DicomDataSet類(lèi)定義了若干常用的文件頭元素屬性如:Version、TransferSyntax、ImplementationClassUID、ImplementationVersionName、MediaStorageSOPClassUID、MediaStorageSOPInstanceUID、SourceApplicationEntityTitle等。當(dāng)SourceApplicationEntityTitle為空時(shí)默認(rèn)取機(jī)器名的前16個(gè)字符作為源應(yīng)用實(shí)體名稱(chēng)。2.DicomFile類(lèi)DicomFile類(lèi)是存儲(chǔ)DICOM文件的類(lèi)定義了File、Format、FilemetaInfo、Dataset、IsPartial屬性定義了Save、SaveAsync、OpenAsync、HasValidHeader、ToString等公共方法在Open/Save過(guò)程中會(huì)用到Dicom.IO程序集中的DicomFileReader類(lèi)和DicomFileWriter類(lèi)DicomFile擴(kuò)展類(lèi)DicomFileExtensions類(lèi)增加了DICOM文件深復(fù)制的Clone方法Dicom.Imaging.Codec命名空間下的DicomCodecExtensions類(lèi),增加了帶有傳輸語(yǔ)法參數(shù)的轉(zhuǎn)碼復(fù)制Clone方法重載類(lèi)

別成

名類(lèi)

型描

述屬性FileIFileReference文件FormatDicomFileFormat文件格式。DicomFileFormat枚舉值有Unknown、DICOM3、DICOM3NoPreamble、DICOM3NoFileMetaInfo、ACRNEMA1、ACRNEMA2FileMetaInfoDicomFileMetaInformation文件頭DatasetDicomDataset數(shù)據(jù)集IsPartialbool是否為文件部分方法Savevoid保存文件SaveAsyncasyncTask異步保存文件OpenstaticDicomFile打開(kāi)文件OpenAsyncstaticasyncTask<DicomFile>異步打開(kāi)文件HasValidHeaderstaticbool文件是否有“DICOM”標(biāo)識(shí)ToStringstring輸出“DICOMFile[格式]”字符串HandleOpenErrorvoid讀文件出錯(cuò)時(shí)拋出異常PreprocessFileMetaInformationvoidSave時(shí)初始化文件頭3.3Dicom.IO輸入輸出程序集3.3.1字節(jié)順序類(lèi)3.3.2字節(jié)緩沖區(qū)接口及類(lèi)3.3.3字節(jié)對(duì)象類(lèi)3.3.4DicomReader類(lèi)3.3.5DicomWriteOption類(lèi)與DicomWriter類(lèi)3.3.6文件讀寫(xiě)類(lèi)3.4依賴(lài)注入3.4.1概述3.4.2依賴(lài)注入的原理3.4.3java依賴(lài)注入3.4.1概述依賴(lài)注入(DependencyInjection,DI)是控制反轉(zhuǎn)思想的一種重要實(shí)現(xiàn)方式,其能將“創(chuàng)建和組裝對(duì)象”操作的控制權(quán)從業(yè)務(wù)邏輯轉(zhuǎn)移到框架中。當(dāng)我們需要某個(gè)類(lèi)型的對(duì)象時(shí),由框架來(lái)提供這個(gè)對(duì)象,不需要關(guān)注此對(duì)象的創(chuàng)建過(guò)程,減小了模塊之間的耦合度具有以下優(yōu)點(diǎn):1.解耦:依賴(lài)注入可以幫助我們將服務(wù)的創(chuàng)建和管理責(zé)任交給容器,這樣服務(wù)實(shí)現(xiàn)類(lèi)與其他類(lèi)之間的依賴(lài)關(guān)系被解耦,使得代碼更加靈活、易于維護(hù)和擴(kuò)展。2.可測(cè)試:通過(guò)依賴(lài)注入,我們可以輕松地模擬和替換服務(wù)的實(shí)現(xiàn)類(lèi),從而在單元測(cè)試中更容易地測(cè)試代碼。3.容易更換實(shí)現(xiàn):在依賴(lài)注入中,我們可以

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論