-
Notifications
You must be signed in to change notification settings - Fork 229
/
Copy pathparseDicomDataSet.js
89 lines (74 loc) · 2.86 KB
/
parseDicomDataSet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/**
* Internal helper functions for parsing implicit and explicit DICOM data sets
*/
var dicomParser = (function (dicomParser)
{
"use strict";
if(dicomParser === undefined)
{
dicomParser = {};
}
/**
* reads an explicit data set
* @param byteStream the byte stream to read from
* @param maxPosition the maximum position to read up to (optional - only needed when reading sequence items)
*/
dicomParser.parseDicomDataSetExplicit = function (dataSet, byteStream, maxPosition, options) {
maxPosition = (maxPosition === undefined) ? byteStream.byteArray.length : maxPosition ;
options = options || {};
if(byteStream === undefined)
{
throw "dicomParser.parseDicomDataSetExplicit: missing required parameter 'byteStream'";
}
if(maxPosition < byteStream.position || maxPosition > byteStream.byteArray.length)
{
throw "dicomParser.parseDicomDataSetExplicit: invalid value for parameter 'maxPosition'";
}
var elements = dataSet.elements;
var element;
while(byteStream.position < maxPosition)
{
element = dicomParser.readDicomElementExplicit(byteStream, dataSet.warnings, options.untilTag);
elements[element.tag] = element;
if(element.tag === options.untilTag) {
element = null;
return;
}
}
delete element.tag;
if(byteStream.position > maxPosition) {
throw "dicomParser:parseDicomDataSetExplicit: buffer overrun";
}
};
/**
* reads an implicit data set
* @param byteStream the byte stream to read from
* @param maxPosition the maximum position to read up to (optional - only needed when reading sequence items)
*/
dicomParser.parseDicomDataSetImplicit = function(dataSet, byteStream, maxPosition, options)
{
maxPosition = (maxPosition === undefined) ? dataSet.byteArray.length : maxPosition ;
options = options || {};
if(byteStream === undefined)
{
throw "dicomParser.parseDicomDataSetImplicit: missing required parameter 'byteStream'";
}
if(maxPosition < byteStream.position || maxPosition > byteStream.byteArray.length)
{
throw "dicomParser.parseDicomDataSetImplicit: invalid value for parameter 'maxPosition'";
}
var elements = dataSet.elements;
var element;
while(byteStream.position < maxPosition)
{
element = dicomParser.readDicomElementImplicit(byteStream, options.untilTag, options.vrCallback);
elements[element.tag] = element;
if(element.tag === options.untilTag) {
element = null;
return;
}
}
delete element.tag;
};
return dicomParser;
}(dicomParser));