UNPKG

js-dicom

Version:

this is js-dicom

46 lines (35 loc) 1.64 kB
import unpackBinaryFrame from './unpackBinaryFrame'; /** * Function to deal with extracting an image frame from an encapsulated data set. */ function getUncompressedImageFrame (dataSet, frameIndex) { const pixelDataElement = dataSet.elements.x7fe00010; const bitsAllocated = dataSet.uint16('x00280100'); const rows = dataSet.uint16('x00280010'); const columns = dataSet.uint16('x00280011'); const samplesPerPixel = dataSet.uint16('x00280002'); const pixelDataOffset = pixelDataElement.dataOffset; const pixelsPerFrame = rows * columns * samplesPerPixel; let frameOffset; if (bitsAllocated === 8) { frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame; if (frameOffset >= dataSet.byteArray.length) { throw 'frame exceeds size of pixelData'; } return new Uint8Array(dataSet.byteArray.buffer, frameOffset, pixelsPerFrame); } else if (bitsAllocated === 16) { frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame * 2; if (frameOffset >= dataSet.byteArray.length) { throw 'frame exceeds size of pixelData'; } return new Uint8Array(dataSet.byteArray.buffer, frameOffset, pixelsPerFrame * 2); } else if (bitsAllocated === 1) { frameOffset = pixelDataOffset + frameIndex * pixelsPerFrame * 0.125; if (frameOffset >= dataSet.byteArray.length) { throw 'frame exceeds size of pixelData'; } return unpackBinaryFrame(dataSet.byteArray, frameOffset, pixelsPerFrame); } throw 'unsupported pixel format'; } export default getUncompressedImageFrame;