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 '../loaders/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 ); }); } |