Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | import { IImage } from '../types';
import { loadAndCacheImage } from '../imageLoader';
import * as metaData from '../metaData';
import { RequestType } from '../enums';
import imageLoadPoolManager from '../requestPool/imageLoadPoolManager';
import renderToCanvas from './renderToCanvas';
/**
* Loads and renders an imageId to a Canvas. It will use the CPU rendering pipeline
* for image.
*
* @example
* ```
* const canvas = document.getElementById('myCanvas')
* const imageId = 'myImageId'
*
* loadImageToCanvas(canvas, imageId)
* ```
* @param imageId - The imageId to render
* @param canvas - Canvas element to render to
* @param requestType - The type of request (default to interaction), can be 'interaction' or 'prefetch' or 'thumbnail'
* the order of loading for the pool manager is interaction, thumbnail, prefetch
* @param priority - The priority of the request within the request type (lower is higher priority)
* @returns - A promise that resolves when the image has been rendered with the imageId
*/
export default function loadImageToCanvas(
canvas: HTMLCanvasElement,
imageId: string,
requestType = RequestType.Thumbnail,
priority = -5
): Promise<string> {
return new Promise((resolve, reject) => {
function successCallback(image: IImage, imageId: string) {
const { modality } = metaData.get('generalSeriesModule', imageId) || {};
image.isPreScaled = image.isPreScaled || image.preScale?.scaled;
renderToCanvas(canvas, image, modality);
resolve(imageId);
}
function errorCallback(error: Error, imageId: string) {
console.error(error, imageId);
reject(error);
}
function sendRequest(imageId, imageIdIndex, options) {
return loadAndCacheImage(imageId, options).then(
(image) => {
successCallback.call(this, image, imageId);
},
(error) => {
errorCallback.call(this, error, imageId);
}
);
}
// IMPORTANT: Request type should be passed if not the 'interaction'
// highest priority will be used for the request type in the imageRetrievalPool
const options = {
targetBuffer: {
type: 'Float32Array',
offset: null,
length: null,
},
preScale: {
enabled: true,
},
requestType,
};
imageLoadPoolManager.addRequest(
sendRequest.bind(null, imageId, null, options),
requestType,
{ imageId },
priority
);
});
}
|