Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (fo dicom)如何修改dicom文件并将其保存到新目录?_C#_Fo Dicom - Fatal编程技术网

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

C# (fo dicom)如何修改dicom文件并将其保存到新目录?,c#,fo-dicom,C#,Fo Dicom,我想修改DICOM的标题并设置两个标记。这是可行的,但当我想将其保存到新文件中时,会出现以下异常: NullReferenceException: Object reference not set to an instance of an object Dicom.Network.NetworkManager.get_MachineName () Dicom.DicomFileMetaInformation.CreateSourceApplicationEntityTitle () 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=新的dicomImage(dicomFile.Dataset);
var header=DicomPixelData.Create(dicomImage.Dataset);
var pixelData=PixelDataFactory.Create(头,0);
对于(intx=0;xmaxValue)
maxValue=pixelData.GetPixel(x,y);
}
}
dicomFile.Dataset.AddOrUpdate(DicomTag.LargestImagePixelValue,Convert.ToString(maxValue));
dicomFile.Dataset.AddOrUpdate(DicomTag.SmallestImagePixelValue,Convert.ToString(minValue));
保存(@“newDicom”);
当我尝试使用Save()方法时,它总是抛出异常。
我使用的是中的文件操作示例,但它不能正常工作


有没有人有更好的保存解决方案的想法,或者我可以解释一下我遗漏了什么

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

将文件写入磁盘时,fo dicom会设置SourceApplicationEntityFile(00020016),因此会尝试访问NetworkManager.LocalMachineName。如果文件不是新创建的,而是从其他文件克隆的,因此已经具有SourceApplicationEntityTitle,则此拉取请求希望重用SourceApplicationEntityTitle。这会解决你的问题。 仔细看看

 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");