66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
| import { metaData } from '@cornerstonejs/core';
 | |
| import cornerstoneDICOMImageLoader from '@cornerstonejs/dicom-image-loader';
 | |
| /**
 | |
|  * preloads imageIds metadata in memory
 | |
|  **/
 | |
| async function prefetchMetadataInformation(imageIdsToPrefetch) {
 | |
|   for (let i = 0; i < imageIdsToPrefetch.length; i++) {
 | |
|     await cornerstoneDICOMImageLoader.wadouri.loadImage(imageIdsToPrefetch[i])
 | |
|       .promise;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function getFrameInformation(imageId) {
 | |
|   if (imageId.includes('wadors:')) {
 | |
|     const frameIndex = imageId.indexOf('/frames/');
 | |
|     const imageIdFrameless =
 | |
|       frameIndex > 0 ? imageId.slice(0, frameIndex + 8) : imageId;
 | |
|     return {
 | |
|       frameIndex,
 | |
|       imageIdFrameless,
 | |
|     };
 | |
|   } else {
 | |
|     const frameIndex = imageId.indexOf('&frame=');
 | |
|     let imageIdFrameless =
 | |
|       frameIndex > 0 ? imageId.slice(0, frameIndex + 7) : imageId;
 | |
|     if (!imageIdFrameless.includes('&frame=')) {
 | |
|       imageIdFrameless = imageIdFrameless + '&frame=';
 | |
|     }
 | |
|     return {
 | |
|       frameIndex,
 | |
|       imageIdFrameless,
 | |
|     };
 | |
|   }
 | |
| }
 | |
| /**
 | |
|  * Receives a list of imageids possibly referring to multiframe dicom images
 | |
|  * and returns a list of imageid where each imageid referes to one frame.
 | |
|  * For each imageId representing a multiframe image with n frames,
 | |
|  * it will create n new imageids, one for each frame, and returns the new list of imageids
 | |
|  * If a particular imageid no refer to a mutiframe image data, it will be just copied into the new list
 | |
|  * @returns new list of imageids where each imageid represents a frame
 | |
|  */
 | |
| function convertMultiframeImageIds(imageIds) {
 | |
|   const newImageIds = [];
 | |
|   imageIds.forEach((imageId) => {
 | |
|     const { imageIdFrameless } = getFrameInformation(imageId);
 | |
|     const instanceMetaData = metaData.get('multiframeModule', imageId);
 | |
|     if (
 | |
|       instanceMetaData &&
 | |
|       instanceMetaData.NumberOfFrames &&
 | |
|       instanceMetaData.NumberOfFrames > 1
 | |
|     ) {
 | |
|       const NumberOfFrames = instanceMetaData.NumberOfFrames;
 | |
|       for (let i = 0; i < NumberOfFrames; i++) {
 | |
|         const newImageId = imageIdFrameless + (i + 1);
 | |
|         newImageIds.push(newImageId);
 | |
|       }
 | |
|     } else {
 | |
|       newImageIds.push(imageId);
 | |
|     }
 | |
|   });
 | |
|   return newImageIds;
 | |
| }
 | |
| 
 | |
| export { convertMultiframeImageIds, prefetchMetadataInformation };
 |