From 111c4a342782ec8d08460366635771598ea6f1a1 Mon Sep 17 00:00:00 2001 From: Erik Ziegler Date: Thu, 15 Jul 2021 17:19:57 +0200 Subject: [PATCH] chore: Changed large if-else to a switch statement (#389) Changed large if-else statement to a switch statement. -divbit2 Co-authored-by: divbit2 <55415915+divbit2@users.noreply.github.com> --- src/imageLoader/decodeImageFrame.js | 96 ++++++++++++++--------------- src/shared/decodeImageFrame.js | 96 +++++++++++++++++------------ 2 files changed, 103 insertions(+), 89 deletions(-) diff --git a/src/imageLoader/decodeImageFrame.js b/src/imageLoader/decodeImageFrame.js index f576cbaa..2d719d92 100644 --- a/src/imageLoader/decodeImageFrame.js +++ b/src/imageLoader/decodeImageFrame.js @@ -66,56 +66,56 @@ function decodeImageFrame( canvas, options = {} ) { - // TODO: Turn this into a switch statement instead - if (transferSyntax === '1.2.840.10008.1.2') { - // Implicit VR Little Endian - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.1') { - // Explicit VR Little Endian - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.2') { - // Explicit VR Big Endian (retired) - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.1.99') { - // Deflate transfer syntax (deflated by dicomParser) - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.5') { - // RLE Lossless - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.50') { - // JPEG Baseline lossy process 1 (8 bit) + switch (transferSyntax) { + case '1.2.840.10008.1.2': + // Implicit VR Little Endian + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.1': + // Explicit VR Little Endian + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.2': + // Explicit VR Big Endian (retired) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.1.99': + // Deflate transfer syntax (deflated by dicomParser) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.5': + // RLE Lossless + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.4.50': + // JPEG Baseline lossy process 1 (8 bit) - // Handle 8-bit JPEG Baseline color images using the browser's built-in - // JPEG decoding - if ( - imageFrame.bitsAllocated === 8 && - (imageFrame.samplesPerPixel === 3 || imageFrame.samplesPerPixel === 4) - ) { - return decodeJPEGBaseline8BitColor(imageFrame, pixelData, canvas); - } + // Handle 8-bit JPEG Baseline color images using the browser's built-in + // JPEG decoding + if ( + imageFrame.bitsAllocated === 8 && + (imageFrame.samplesPerPixel === 3 || imageFrame.samplesPerPixel === 4) + ) { + return decodeJPEGBaseline8BitColor(imageFrame, pixelData, canvas); + } - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.51') { - // JPEG Baseline lossy process 2 & 4 (12 bit) - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.57') { - // JPEG Lossless, Nonhierarchical (Processes 14) - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.70') { - // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1]) - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.80') { - // JPEG-LS Lossless Image Compression - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.81') { - // JPEG-LS Lossy (Near-Lossless) Image Compression - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.90') { - // JPEG 2000 Lossless - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.91') { - // JPEG 2000 Lossy - return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.4.51': + // JPEG Baseline lossy process 2 & 4 (12 bit) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.4.57': + // JPEG Lossless, Nonhierarchical (Processes 14) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.4.70': + // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1]) + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.4.80': + // JPEG-LS Lossless Image Compression + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.4.81': + // JPEG-LS Lossy (Near-Lossless) Image Compression + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.4.90': + // JPEG 2000 Lossless + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); + case '1.2.840.10008.1.2.4.91': + // JPEG 2000 Lossy + return processDecodeTask(imageFrame, transferSyntax, pixelData, options); } /* Don't know if these work... diff --git a/src/shared/decodeImageFrame.js b/src/shared/decodeImageFrame.js index 5e8b8873..debfa602 100644 --- a/src/shared/decodeImageFrame.js +++ b/src/shared/decodeImageFrame.js @@ -17,47 +17,61 @@ function decodeImageFrame( ) { const start = new Date().getTime(); - if (transferSyntax === '1.2.840.10008.1.2') { - // Implicit VR Little Endian - imageFrame = decodeLittleEndian(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.1') { - // Explicit VR Little Endian - imageFrame = decodeLittleEndian(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.2') { - // Explicit VR Big Endian (retired) - imageFrame = decodeBigEndian(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.1.99') { - // Deflate transfer syntax (deflated by dicomParser) - imageFrame = decodeLittleEndian(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.5') { - // RLE Lossless - imageFrame = decodeRLE(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.4.50') { - // JPEG Baseline lossy process 1 (8 bit) - imageFrame = decodeJPEGBaseline(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.4.51') { - // JPEG Baseline lossy process 2 & 4 (12 bit) - imageFrame = decodeJPEGBaseline(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.4.57') { - // JPEG Lossless, Nonhierarchical (Processes 14) - imageFrame = decodeJPEGLossless(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.4.70') { - // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1]) - imageFrame = decodeJPEGLossless(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.4.80') { - // JPEG-LS Lossless Image Compression - imageFrame = decodeJPEGLS(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.4.81') { - // JPEG-LS Lossy (Near-Lossless) Image Compression - imageFrame = decodeJPEGLS(imageFrame, pixelData); - } else if (transferSyntax === '1.2.840.10008.1.2.4.90') { - // JPEG 2000 Lossless - imageFrame = decodeJPEG2000(imageFrame, pixelData, decodeConfig, options); - } else if (transferSyntax === '1.2.840.10008.1.2.4.91') { - // JPEG 2000 Lossy - imageFrame = decodeJPEG2000(imageFrame, pixelData, decodeConfig, options); - } else { - throw new Error(`no decoder for transfer syntax ${transferSyntax}`); + switch (transferSyntax) { + case '1.2.840.10008.1.2': + // Implicit VR Little Endian + imageFrame = decodeLittleEndian(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.1': + // Explicit VR Little Endian + imageFrame = decodeLittleEndian(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.2': + // Explicit VR Big Endian (retired) + imageFrame = decodeBigEndian(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.1.99': + // Deflate transfer syntax (deflated by dicomParser) + imageFrame = decodeLittleEndian(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.5': + // RLE Lossless + imageFrame = decodeRLE(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.4.50': + // JPEG Baseline lossy process 1 (8 bit) + imageFrame = decodeJPEGBaseline(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.4.51': + // JPEG Baseline lossy process 2 & 4 (12 bit) + imageFrame = decodeJPEGBaseline(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.4.57': + // JPEG Lossless, Nonhierarchical (Processes 14) + imageFrame = decodeJPEGLossless(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.4.70': + // JPEG Lossless, Nonhierarchical (Processes 14 [Selection 1]) + imageFrame = decodeJPEGLossless(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.4.80': + // JPEG-LS Lossless Image Compression + imageFrame = decodeJPEGLS(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.4.81': + // JPEG-LS Lossy (Near-Lossless) Image Compression + imageFrame = decodeJPEGLS(imageFrame, pixelData); + break; + case '1.2.840.10008.1.2.4.90': + // JPEG 2000 Lossless + imageFrame = decodeJPEG2000(imageFrame, pixelData, decodeConfig, options); + break; + case '1.2.840.10008.1.2.4.91': + // JPEG 2000 Lossy + imageFrame = decodeJPEG2000(imageFrame, pixelData, decodeConfig, options); + break; + default: + throw new Error(`no decoder for transfer syntax ${transferSyntax}`); } /* Don't know if these work...