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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | 428x 428x | import type { LibJpegTurbo8Bit, OpenJpegModule, } from '@cornerstonejs/codec-libjpeg-turbo-8bit/dist/libjpegturbowasm_decode'; import type { ByteArray } from 'dicom-parser'; // @ts-ignore import libjpegTurboFactory from '@cornerstonejs/codec-libjpeg-turbo-8bit/decodewasmjs'; // @ts-ignore // import libjpegTurboWasm from '@cornerstonejs/codec-libjpeg-turbo-8bit/decodewasm'; const libjpegTurboWasm = new URL( '@cornerstonejs/codec-libjpeg-turbo-8bit/decodewasm', import.meta.url ); import type { Types } from '@cornerstonejs/core'; const local: { codec: OpenJpegModule; decoder: LibJpegTurbo8Bit; } = { codec: undefined, decoder: undefined, }; function initLibjpegTurbo(): Promise<void> { if (local.codec) { return Promise.resolve(); } const libjpegTurboModule = libjpegTurboFactory({ locateFile: (f) => { if (f.endsWith('.wasm')) { return libjpegTurboWasm.toString(); } return f; }, }); return new Promise((resolve, reject) => { libjpegTurboModule.then((instance) => { local.codec = instance; local.decoder = new instance.JPEGDecoder(); resolve(); }, reject); }); } // imageFrame.pixelRepresentation === 1 <-- Signed /** * * @param {*} compressedImageFrame * @param {object} imageInfo * @param {boolean} imageInfo.signed - */ async function decodeAsync( compressedImageFrame, imageInfo ): Promise<Types.IImageFrame> { await initLibjpegTurbo(); const decoder = local.decoder; // get pointer to the source/encoded bit stream buffer in WASM memory // that can hold the encoded bitstream const encodedBufferInWASM = decoder.getEncodedBuffer( compressedImageFrame.length ); // copy the encoded bitstream into WASM memory buffer encodedBufferInWASM.set(compressedImageFrame); // decode it decoder.decode(); // get information about the decoded image const frameInfo = decoder.getFrameInfo(); // get the decoded pixels const decodedPixelsInWASM = decoder.getDecodedBuffer(); const encodedImageInfo = { columns: frameInfo.width, rows: frameInfo.height, bitsPerPixel: frameInfo.bitsPerSample, signed: imageInfo.signed, bytesPerPixel: imageInfo.bytesPerPixel, componentsPerPixel: frameInfo.componentCount, }; const pixelData = getPixelData(frameInfo, decodedPixelsInWASM); const encodeOptions = { frameInfo, }; return { ...imageInfo, pixelData, imageInfo: encodedImageInfo, encodeOptions, ...encodeOptions, ...encodedImageInfo, }; } function getPixelData(frameInfo, decodedBuffer: ByteArray) { if (frameInfo.isSigned) { return new Int8Array( decodedBuffer.buffer, decodedBuffer.byteOffset, decodedBuffer.byteLength ); } return new Uint8Array( decodedBuffer.buffer, decodedBuffer.byteOffset, decodedBuffer.byteLength ); } export default decodeAsync; |