78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
cornerstoneWADORSImageLoader = {
|
|
internal : {
|
|
nextIndex: 0,
|
|
imageIds : []
|
|
}
|
|
};
|
|
|
|
cornerstoneWADORSImageLoader.addImage = function(image) {
|
|
var index = cornerstoneWADORSImageLoader.internal.nextIndex++;
|
|
cornerstoneWADORSImageLoader.internal.imageIds[index] = image;
|
|
var imageId = 'wadors:' + index;
|
|
return imageId;
|
|
};
|
|
|
|
function getMinMax(storedPixelData)
|
|
{
|
|
// we always calculate the min max values since they are not always
|
|
// present in DICOM and we don't want to trust them anyway as cornerstone
|
|
// depends on us providing reliable values for these
|
|
var min = 65535;
|
|
var max = -32768;
|
|
var numPixels = storedPixelData.length;
|
|
var pixelData = storedPixelData;
|
|
for(var index = 0; index < numPixels; index++) {
|
|
var spv = pixelData[index];
|
|
// TODO: test to see if it is faster to use conditional here rather than calling min/max functions
|
|
min = Math.min(min, spv);
|
|
max = Math.max(max, spv);
|
|
}
|
|
|
|
return {
|
|
min: min,
|
|
max: max
|
|
};
|
|
}
|
|
|
|
cornerstone.registerImageLoader('wadors', function(imageId) {
|
|
var index = imageId.substring(7);
|
|
var image = cornerstoneWADORSImageLoader.internal.imageIds[index];
|
|
|
|
var deferred = $.Deferred();
|
|
|
|
var mediaType;// = 'image/dicom+jp2';
|
|
|
|
DICOMWeb.getImageFrame(image.uri, mediaType).then(function(result) {
|
|
//console.log(result);
|
|
// TODO: add support for retrieving compressed pixel data
|
|
var storedPixelData;
|
|
if(image.instance.bitsAllocated === 16) {
|
|
if(image.instance.pixelRepresentation === 0) {
|
|
storedPixelData = new Uint16Array(result.arrayBuffer, result.offset, result.length / 2);
|
|
} else {
|
|
storedPixelData = new Int16Array(result.arrayBuffer, result.offset, result.length / 2);
|
|
}
|
|
} else if(image.instance.bitsAllocated === 8) {
|
|
storedPixelData = new Uint8Array(result.arrayBuffer, result.offset, result.length);
|
|
}
|
|
|
|
// TODO: handle various color space conversions
|
|
|
|
var minMax = getMinMax(storedPixelData);
|
|
image.imageId = imageId;
|
|
image.minPixelValue = minMax.min;
|
|
image.maxPixelValue = minMax.max;
|
|
image.render = cornerstone.renderGrayscaleImage;
|
|
image.getPixelData = function() {
|
|
return storedPixelData;
|
|
};
|
|
//console.log(image);
|
|
deferred.resolve(image);
|
|
}).catch(function(reason) {
|
|
deferred.reject(reason);
|
|
});
|
|
|
|
return deferred;
|
|
});
|
|
|