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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x | import { IImage } from '../types'; import { loadAndCacheImage } from '../loaders/imageLoader'; import * as metaData from '../metaData'; import { RequestType } from '../enums'; import imageLoadPoolManager from '../requestPool/imageLoadPoolManager'; import renderToCanvasGPU from './renderToCanvasGPU'; import renderToCanvasCPU from './renderToCanvasCPU'; import { getConfiguration } from '../init'; interface LoadImageOptions { canvas: HTMLCanvasElement; imageId: string; requestType?: RequestType; priority?: number; renderingEngineId?: string; useCPURendering?: boolean; } /** * Loads and renders an imageId to a Canvas. It will use the GPU rendering pipeline * for image by default but you can force the CPU rendering pipeline by setting the * useCPURendering parameter to true. * * @example * ``` * const canvas = document.getElementById('myCanvas') * const imageId = 'myImageId' * * loadImageToCanvas(canvas, imageId) * ``` * @param canvas - Canvas element to render to * @param imageId - The imageId to render * @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) * @param useCPURendering - Force the use of the CPU rendering pipeline (default to false) * @returns - A promise that resolves when the image has been rendered with the imageId */ export default function loadImageToCanvas( options: LoadImageOptions ): Promise<string> { const { canvas, imageId, requestType = RequestType.Thumbnail, priority = -5, renderingEngineId = '_thumbnails', useCPURendering = false, } = options; const renderFn = useCPURendering ? renderToCanvasCPU : renderToCanvasGPU; return new Promise((resolve, reject) => { function successCallback(image: IImage, imageId: string) { const { modality } = metaData.get('generalSeriesModule', imageId) || {}; image.isPreScaled = image.isPreScaled || image.preScale?.scaled; renderFn(canvas, image, modality, renderingEngineId).then(() => { 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); } ); } const { useNorm16Texture } = getConfiguration().rendering; // 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: useNorm16Texture ? undefined : 'Float32Array', }, preScale: { enabled: true, }, useRGBA: !!useCPURendering, requestType, }; imageLoadPoolManager.addRequest( sendRequest.bind(null, imageId, null, options), requestType, { imageId }, priority ); }); } |