(fo-dicom)如何修改DICOM文件并将其保存到新目录?

时间:2017-10-18 16:07:49

标签: c# fo-dicom

我想修改DICOM的标题并设置两个标记。这有效,但是当我想将它保存在一个新文件中时,我得到了这个例外:

NullReferenceException: Object reference not set to an instance of an object
Dicom.Network.NetworkManager.get_MachineName ()
Dicom.DicomFileMetaInformation.CreateSourceApplicationEntityTitle ()
Dicom.DicomFileMetaInformation..ctor (Dicom.DicomFileMetaInformation metaInfo)
Dicom.DicomFile.PreprocessFileMetaInformation ()
Dicom.DicomFile.Save (System.String fileName,   
Dicom.IO.Writer.DicomWriteOptions options)
DICOMConverter.addMaxMin () (at Assets/Scripts/DICOMConverter.cs:67)

我的DICOMConverter.addMaxMin()代码是:

 var dicomFile = DicomFile.Open(DICOMFilePath);
 var dicomImage = new DicomImage(dicomFile.Dataset);
 var header = DicomPixelData.Create(dicomImage.Dataset);

 var pixelData = PixelDataFactory.Create(header, 0);

 for (int x = 0; x < Convert.ToInt32(dicomFile.Dataset.Get<string>(DicomTag.Columns)); x++)
 {
    for (int y = 0; y < Convert.ToInt32(dicomFile.Dataset.Get<string>(DicomTag.Rows)); y++)
    {
         if (pixelData.GetPixel(x, y) < minValue)
                    minValue = pixelData.GetPixel(x, y);
         if (pixelData.GetPixel(x, y) > maxValue)
                    maxValue = pixelData.GetPixel(x, y);
     }
  }

  dicomFile.Dataset.AddOrUpdate(DicomTag.LargestImagePixelValue, Convert.ToString(maxValue));
  dicomFile.Dataset.AddOrUpdate(DicomTag.SmallestImagePixelValue, Convert.ToString(minValue));

  dicomFile.Save(@"newDicom"); 

当我尝试使用Save()方法时,它总是抛出异常 我使用了https://github.com/fo-dicom/fo-dicom中的文件操作示例,但它没有正常工作。

有人想要一个更好的保存解决方案,还是我能解释一下我缺少的东西?

1 个答案:

答案 0 :(得分:1)

发生此异常,因为由于某种原因,您的应用程序没有正确设置NetworkManager的平台特定实现。这发生在NetworkManager类的静态构造函数中。但您可以随时通过NetworkManager.SetImplementation(..)手动设置它。 没有任何进一步的信息,很难说为什么没有初始化实例,但在下一个版本中将会有另一个解决方案:

将文件写入磁盘时,fo-dicom设置SourceApplicationEntityTile(0002,0016),因此尝试访问NetworkManager.LocalMachineName。如果文件不是新创建的,而是从其他文件克隆,因此该pull请求想要重用SourceApplicationEntityTitle,因此已经有SourceApplicationEntityTitle。这可以解决您的问题。 仔细看看https://github.com/fo-dicom/fo-dicom/pull/615