2015-01-07 61 views
0

我正在使用GDCM庫創建DICOMDIR文件。我實現爲GDCM文檔顯示的代碼:無法使用GDCM庫創建DICOMDIR文件

http://gdcm.sourceforge.net/html/GenerateDICOMDIR_8cs-example.html

在代碼:

private int GenerateDicomDir(string directory, string outFileName) 
    { 
     gdcm.Directory d = new gdcm.Directory(); 
     uint nfiles = d.Load(directory, true); 
     if (nfiles == 0) return 1; 

     string descriptor = "Descriptor"; 
     FilenamesType filenames = d.GetFilenames(); 

     gdcm.Trace.DebugOn(); 
     gdcm.DICOMDIRGenerator gen = new DICOMDIRGenerator(); 
     gen.SetFilenames(filenames); 
     gen.SetDescriptor(descriptor); 
     if (!gen.Generate()) 
     { 
      return 1; 
     } 

     gdcm.FileMetaInformation.SetSourceApplicationEntityTitle("GenerateDICOMDIR"); 
     gdcm.Writer writer = new Writer(); 
     writer.SetFile(gen.GetFile()); 

     writer.SetFileName(outFileName); 
     if (!writer.Write()) 
     { 
      return 1; 
     } 

     return 0; 
    } 

該函數返回,並且不產生DICOMDIR文件。我添加了跟蹤調試,但仍然無法調試或獲取任何輸出消息。

有沒有什麼辦法可以爲一堆DICOM文件生成DICOMDIR文件?

回答

0

按照該documentation,你是否確信:

警告:PS 3.11 - 2008/D.3.1 SOP類和傳送語法 合成圖像&單機需要存儲到存儲作爲 未壓縮顯式VR Little Endian(1.2.840.10008.1.2.1)。當使用另一個傳輸語法找到一個 DICOM文件時,發生器將簡單地停止 。輸入文件應該是明確的VR小Endian 的文件名應該是有效的VR :: CS值(16個字節,大寫...)

如果你把詳細的調試,你可以記錄確切的錯誤信息,請參閱gdcm::Trace爲用法。

按照gdcm的文檔::跟蹤,您需要注意以下幾點:

警告:所有的字符串消息期間,當編譯CMAKE_BUILD_TYPE 被設置爲編譯時間刪除:發行MinSizeRel 建議在 應用程序的原型設計期間使用RelWithDebInfo和/或Debug進行編譯。

您也可以使用gdcm::Trace::SetStreamToFile將任何消息重定向到文件(默認情況下不是stdout)。

由於您使用gdcm.Directory的遞歸選項,因此您還需要注意子目錄名稱是有效的(VR :: CS,16字節,大寫...)。

有關更多信息,另請參見gdcmgendir man page

+0

我已經添加了你說的並更新了問題部分代碼的最新版本。但是,輸出控制檯中仍然沒有調試消息。 @malat –

+0

我不知道爲什麼你不能在你身邊得到錯誤信息,但我敢打賭,問題在於我發表的原始文章。你的文件名約定是錯誤的(99%的機率),或者你忘了將DCM文件轉換爲明確的小尾端傳輸語法。 – malat

+0

我使用的是1.2.840.10008.1.2.1 uid,它是Explicit VR Little Endian。我的文件名是IM180。 –