为了进行一些测试,我试图操作以dicom格式存储的CT图像中的PixelData
元素,并使用C#中的Fellow Oak Dicom将其写回文件。经过一些研究,我发现我想要处理的矩阵位于PixelData
的Buffer
中,存储在一个byte
数组中。所以我编写了以下代码:
DicomFile ctFile = DicomFile.Open(image);
var pixDat = ctFile.Dataset.Get<byte[]>(DicomTag.PixelData);
for (int i = 0; i < pixData.Length; i++)
{
pixDat[i] = Convert.ToByte(200);
}
ctFile.Dataset.AddOrUpdate<byte[]>(DicomTag.PixelData, pixDat);
ctFile.Save("new file folder");
这是我的第一次尝试,当我执行
AddOrUpdate
命令时出现了一个Exception
,因为它无法将byte
数组转换为OB。例如,在阅读Pianykh的DICOM书籍时,OB表示其他字节字符串。但到目前为止,我还无法将操作后的byte
数组转换为OB。当我尝试使用以下代码片段时:DicomOtherByte dob = new DicomOtherByte(DicomTag.PixelData, pixDat);
ctFile.Dataset.AddOrUpdate<DicomOtherByte>(DicomTag.PixelData, dob);
Exception
仍然在AddOrUpdate
处调用,因为无法将项目转换为OB。 在stackoverflow、git中查找fo-dicom文档或使用谷歌搜索,我仍然没有弄清楚如何处理它。 因此,我想知道如何将我操作过的矩阵转换为OB,因为我认为DicomOtherByte
是OB。
编辑:异常是“使用Dicom.DicomOtherByte类型的值无法创建类型为OB的DICOM元素”- System.InvalidOperationException
提前致谢。
foreach
循环改成了for
循环。您是对的,foreach
循环看起来有点奇怪。 - Booma