[英](fo-dicom) How can I modify and save a DICOM file to a new directory?
我想修改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中的文件操作示例,但是它不能正常工作。
有人對更好的保存解決方案有想法嗎,或者我可以解釋一下我所缺少的嗎?
發生此異常是因為由於某種原因您的應用程序沒有正確設置平台特定的NetworkManager實現。 這發生在NetworkManager類的靜態構造函數中。 但是您可以隨時通過NetworkManager.SetImplementation(..)手動進行設置。 沒有更多的信息,很難說為什么沒有實例被初始化,但是在下一版的fo-dicom中將有另一個解決方案:
將文件寫入磁盤時,fo-dicom會設置SourceApplicationEntityTile(0002,0016),因此嘗試訪問NetworkManager.LocalMachineName。 如果該文件不是新建的,而是從另一個文件克隆的,因此已經具有SourceApplicationEntityTitle,則該拉取請求希望重用SourceApplicationEntityTitle。 這樣可以解決您的問題。 仔細看看https://github.com/fo-dicom/fo-dicom/pull/615
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.