All files loadImage.js

1.72% Statements 1/58
0% Branches 0/26
0% Functions 0/13
1.72% Lines 1/58

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 124 125 126 127 128 129 130 131 132 133                            1x                                                                                                                                                                                                                                            
import { external } from './externalModules.js';
import arrayBufferToImage from './arrayBufferToImage.js';
import imageToImage from './imageToImage.js';
import canvasToImage from './canvasToImage.js';
import dicomCanvasToImage from './dicomToImage.js';
import createImage from './createImage.js';
import createImageCustom from './createImageCustom.js';
import parseImageId from './parseImageId.js';
import fileManager from './fileManager.js';
 
//
// This is a Cornerstone image loader for images (PNG, JPG) using the HTML5 File API 
//
 
let options = {
 
};
 
// Loads an image from a HTML5 API file to an image
export function loadImage (imageId) {
  const parsedImageId = parseImageId(imageId);
  const fileIndex = parseInt(parsedImageId.url, 10);
  const file = fileManager.get(fileIndex);
 
  if (parsedImageId.scheme === 'imagefile') {
 
    const promise = new Promise((resolve, reject) => {
      const fileReader = new FileReader();
      fileReader.onload = (e) => {
        const imageAsArrayBuffer = e.target.result;
        const imagePromise = arrayBufferToImage(imageAsArrayBuffer);
        imagePromise.then((image) => {
          const imageObject = createImage(image, imageId);
          resolve(imageObject);
        }, reject);
      };
 
      fileReader.onerror = reject;
 
      fileReader.readAsArrayBuffer(file);
    });
 
    return {
      promise
    };   
 
  } else if (parsedImageId.scheme === 'imagebuffer') {
 
    const promise = new Promise((resolve, reject) => {
      if (file !== null && file !== undefined) { // file is an ArrayBuffer
        const imageAsArrayBuffer = file;
        const imagePromise = arrayBufferToImage(imageAsArrayBuffer);
        imagePromise.then((image) => {
          const imageObject = createImage(image, imageId);
          resolve(imageObject);
        }, reject);
      } else {
        reject('buffer is null or undefined');
      }
    });
 
    return {
      promise
    };   
	
  } else if (parsedImageId.scheme === 'imageimage') {
 
    const promise = new Promise((resolve, reject) => {
      if (file !== null && file !== undefined) { // file is an image
        const imagePromise = imageToImage(file);
        imagePromise.then((image) => {
          const imageObject = createImage(image, imageId);
          resolve(imageObject);
        }, reject);
      } else {
        reject('image is null or undefined');
      }
    });
 
    return {
      promise
    };   
    
  } else if (parsedImageId.scheme === 'imagecanvas') {
 
    const promise = new Promise((resolve, reject) => {
      if (file !== null && file !== undefined) { // file is a canvas
        const imagePromise = canvasToImage(file);
        imagePromise.then((image) => {
          const imageObject = createImage(image, imageId);
          resolve(imageObject);
        }, reject);
      } else {
        reject('canvas is null or undefined');
      }
    });
 
    return {
      promise
    };   
    
  } else if (parsedImageId.scheme === 'imagecustom') {
    
    const start = new Date().getTime();
    const promise = new Promise((resolve, reject) => {
      const loadEnd = new Date().getTime();
      if (file !== null && file !== undefined) { // file is an custom object, with a cornerstone Image object and a pixelData array
        let imagePromise = createImageCustom(imageId, file);
        imagePromise.then(image => {
          const end = new Date().getTime();
 
          image.loadTimeInMS = loadEnd - start;
          image.totalTimeInMS = end - start;  
          
          resolve(image);
        }, reject);
      } else {
        reject('custom object is null or undefined');
      }
    });
 
    return {
      promise
    };   
    
  }
  
}
 
export function configure (opts) {
  options = opts;
}