我收到带有嵌入式xml结果文件的DICOM图像。我可以使用DVTk找到xml应该位于的标签,但是我无法弄清楚如何使用MyDICOM提取它。
我无法共享DICOM,因为它包含专有信息,我没有权限。我希望有人能够与MyDICOM合作,可能会有所帮助。
我怀疑发布我会帮助任何人的代码,但无论如何我都会这样做:
if (element.ValueRepresentation.ToString().ToLower().Equals("ob"))
{
DeferredStream stream = element.Get(0) as DeferredStream;
MyDicom.StreamReader reader = new MyDicom.StreamReader(stream, dicom.MetaData.Tsn);
reader.UseDeferredStream = true;
reader.EnforceEvenByteSizeElement = dicom.EnforceEvenByteSize;
if (dicom.PrivateDictionary != null)
reader.PrivateDictionary = dicom.PrivateDictionary;
//object embedded = reader.Deserialize(this.dataSetStartTag, this.dataSetEndTag);
}
我不确定这段代码是否真的有效,即使有,我也没有开始和结束标签。我没有提供太多信息,所以我没有期待太多,但我希望能够在正确的方向上轻松推动。
答案 0 :(得分:0)
这不是正确的方法,但这是我能够在没有MyDICOM正确文档的情况下找到的唯一方法。我将流加载到一个字符串中,然后搜索我需要的信息。
// Set up the stream
object elem = element.Get(0);
if (elem is DeferredStream)
stream = elem as DeferredStream;
else if (elem is MemoryStream)
stream = elem as MemoryStream;
// Set up the stream reader
reader = new MyDicom.StreamReader(stream, dicom.MetaData.Tsn);
reader.UseDeferredStream = (elem is DeferredStream);
reader.EnforceEvenByteSizeElement = dicom.EnforceEvenByteSize;
if (dicom.PrivateDictionary != null)
reader.PrivateDictionary = dicom.PrivateDictionary;
// Read the Stream into a String
byte[] read = reader.ReadBytes(Convert.ToInt32(stream.Length));
String data = System.Text.Encoding.Default.GetString(read);
int start = data.IndexOf("<PatientData>");
int length = data.Substring(start).IndexOf("</PatientData>") + 15;
if (start > 0 && length > 0)
result = data.Substring(start, length);
else
result = "";
我担心这种方法的速度和准确性,所以如果有人知道的话,仍然会欢迎正确的方法。否则,我会将此标记为完整。