解析DCM文件中的标签
dcm文件中都会存有于患者,及病因有关的信息标签,这些标签可能会被用到,也可能用不到,但还是要了解。 可以来这个网站查看标签信息 DICOM, 或者掘金也有作者归纳好了。 链接。
解析这些标签需要用到 dicomParser插件
//在这个函数里会返回一些对象,对象中的data属性有以及挂载的标签信息
cornerstone.loadAndCacheImage(imageId).then(img => {
cornerstone.displayImage(element,img);
})
img.data
- byteArray 这个是字节数组
- byteArrayParser 中的属性可以解析原始数据数组
- elements DCM文件中的标签信息
标签对应的信息就不展开了,提供的两个网站对有解释。 例如:需要获取病人的ID ---> img.data.elements["x00100020"], 这样就能获取到一个包含了病人ID开始的字节位以及结束的字节位。
- dataOffset 字节数组中的起始位
- length 病人ID信息的长度
- tag 病人ID
- vr 识别数据类型
知道了以上信息,就可以使用 dicomParser提供的 DataSet构造函数解析标签信息,当然也可以自己解析。无论是自己解析还是 dicomParser解析都用到 String.fromCharCode函数。 先看源码 :
DataSet函数中的 text, string大致是一样的。
string
text
使用也很简单
cornerstone.loadAndCacheImage(imageId).then(img => {
let byteArray = img.data.byteArray,
byteArrayParser = img.data.byteArrayParser,
elements = img.data.elements;
console.log(new dicomParser.DataSet(byteArray,byteArrayParser,elements).string("x00100020"));
cornerstone.displayImage(element,img);
})
自己解析的话:
let elements = img.data.elements["x00100020"];
resolveTag(img.data.byteArray,elements.dataOffset,elements.length);
function resolveTag(byteArray, position, len) {
let result = "";
for (let i = 0; i < len; i++) {
let temp = byteArray[position + i];
result += String.fromCharCode(temp);
}
return result;
}
基本能获取的信息就这些,更深的还是要靠自己去查看源码,试着写一遍。