ohif-viewer/Packages/ohif-measurements/client/lib/getImageDataUrl.js
2017-08-15 07:50:20 -03:00

78 lines
2.7 KiB
JavaScript

import { OHIF } from 'meteor/ohif:core';
import { $ } from 'meteor/jquery';
OHIF.measurements.getImageDataUrl = ({
imageType='image/jpeg',
quality=1,
width=512,
height=512,
cacheImage=true,
imagePath,
measurement
}) => {
imagePath = imagePath || measurement.imagePath;
const imageId = OHIF.viewerbase.getImageIdForImagePath(imagePath);
return new Promise((resolve, reject) => {
const loadMethod = cacheImage ? 'loadAndCacheImage' : 'loadImage';
cornerstone[loadMethod](imageId).then(image => {
// Create a cornerstone enabled element to handle the image
const enabledElement = createEnabledElement(width, height);
const element = enabledElement.element;
// Display the image on cornerstone's canvas
cornerstone.displayImage(element, image);
// Add the measurement state and enable the tool if a measurement was given
if (measurement) {
const state = Object.assign({}, measurement, { active: true });
cornerstoneTools.addToolState(element, measurement.toolType, state);
cornerstoneTools[measurement.toolType].enable(element);
}
// Wait for image rendering to get its data URL
$(element).one('CornerstoneImageRendered', () => {
const dataUrl = enabledElement.canvas.toDataURL(imageType, quality);
// Disable the tool and clear the measurement state if a measurement was given
if (measurement) {
cornerstoneTools[measurement.toolType].disable(element);
cornerstoneTools.clearToolState(element, measurement.toolType);
}
// Destroy the cornerstone enabled element, removing it from the DOM
destroyEnabledElement(enabledElement);
// Resolve the promise with the image's data URL
resolve(dataUrl);
});
});
});
};
const createEnabledElement = (width, height) => {
const $element = $('<div></div>').css({
height,
left: 0,
position: 'fixed',
top: 0,
visibility: 'hidden',
width,
'z-index': -1
});
const element = $element[0];
$element.appendTo(document.body);
cornerstone.enable(element, { renderer: 'webgl' });
const enabledElement = cornerstone.getEnabledElement(element);
enabledElement.toolStateManager = cornerstoneTools.newImageIdSpecificToolStateManager();
return enabledElement;
};
const destroyEnabledElement = enabledElement => {
cornerstone.disable(enabledElement.element);
$(enabledElement.element).remove();
};