如何使用fo-dicom获取dicom项的完整字符串元素?

时间:2017-10-13 11:30:12

标签: c# string dicom fo-dicom

我试图在一个带有动画片的dicom文件中获得一系列放射治疗计划。对你来说似乎并不那么难,但是因为我找不到合适的命令而陷入困境。

我正在过滤该计划,例如对于Leaf/Jaw Positions。 VS调试模式中显示的字符串值是" -35 // 35" ,我也可以在我的DICOM编辑器中找到它。但输出只给我 -35 的值。我的代码就像

var Leaf = file.Dataset.Get<Dicom.DicomSequence>(Dicom.DicomTag.BeamSequence).Items[0].
            Get<Dicom.DicomSequence>(Dicom.DicomTag.ControlPointSequence).Items[0].
            Get<Dicom.DicomSequence>(Dicom.DicomTag.BeamLimitingDevicePositionSequence).Items[0].
            Get<string>(Dicom.DicomTag.LeafJawPositions);

因此,我只得到提到的第一个值。通过在调试覆盖中将最后Get<string>()更改为Get<Dicom.DicomElement>()或其他内容,我可以再次看到整个字符串,但无法打印它。

我在这里查看C# Split A String By Another StringEasiest way to split a string on newlines in .NET?我尝试编辑代码

string Leaf = file.Dataset.Get<Dicom.DicomSequence>(Dicom.DicomTag.BeamSequence).Items[0].
            Get<Dicom.DicomSequence>(Dicom.DicomTag.ControlPointSequence).Items[0].
            Get<Dicom.DicomSequence>(Dicom.DicomTag.BeamLimitingDevicePositionSequence).Items[0].
            Get<Dicom.DicomElement>(Dicom.DicomTag.LeafJawPositions);

但是string无法接受Dicom.DicomElement作为字符串,并且在最后一行使用Get<string>()我只能再次获得剪切字符串。

希望你能帮忙找到我做错的地方,以及如何获得这个项目的完整字符串。

1 个答案:

答案 0 :(得分:4)

来自https://github.com/fo-dicom/fo-dicom/issues/491他们正在使用新API解决问题,但假设您使用的是旧版本,

string Leaf = String.Join(@"\",
              ...
              Get<string[]>(Dicom.DicomTag.LeafJawPositions));

应该返回您的期望。

PS我对string使用Join扩展方法:

public static string Join(this IEnumerable<string> strings, string sep) => String.Join(sep, strings.ToArray());
public static string Join(this IEnumerable<string> strings, char sep) => String.Join(sep.ToString(), strings.ToArray());