UNPKG

dicom-microscopy-viewer

Version:
155 lines (128 loc) 7.05 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: webWorker/transformers/transformerICC.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: webWorker/transformers/transformerICC.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>import dicomiccFactory from 'dicomicc/dist/dicomiccwasm.js' import dicomiccWASM from 'dicomicc/dist/dicomiccwasm.wasm' import Transformer from './transformerAbstract.js' export default class ColorTransformer extends Transformer { /** * Construct transformer object. * * @param {Array&lt;metadata.VLWholeSlideMicroscopyImage>} - Metadata of each * image * @param {Array&lt;TypedArray>} - ICC profiles of each image */ constructor (metadata, iccProfiles) { super() if (metadata.length !== iccProfiles.length) { throw new Error( 'Argument "metadata" and "iccProfiles" must have same length: ' + `${metadata.length} versus ${iccProfiles.length}` ) } this.metadata = metadata this.iccProfiles = iccProfiles this.codec = null this.transformers = {} } _initialize () { if (this.codec) { return Promise.resolve() } const dicomicc = dicomiccFactory({ locateFile: (f) => { if (f.endsWith('.wasm')) { return dicomiccWASM } return f } }) return new Promise((resolve, reject) => { dicomicc.then((instance) => { this.codec = instance for (let index = 0; index &lt; this.metadata.length; index++) { const columns = this.metadata[index].Columns const rows = this.metadata[index].Rows const bitsPerSample = this.metadata[index].BitsAllocated const samplesPerPixel = this.metadata[index].SamplesPerPixel const planarConfiguration = this.metadata[index].PlanarConfiguration const sopInstanceUID = this.metadata[index].SOPInstanceUID const profile = this.iccProfiles[index] this.transformers[sopInstanceUID] = new this.codec.ColorManager( { columns, rows, bitsPerSample, samplesPerPixel, planarConfiguration }, profile ) } resolve(this.transformers) }, reject) }) } /** * Transform image. * * The transform is applied only is iccProfiles are available. * Otherwise the function return the original decoded frame. * * @param {string} - SOP Instance UID of current image that should be transformed * @param {Buffer} - decoded Frame * * @returns {Promise&lt;Buffer>} transformed buffer */ async transform (sopInstanceUID, decodedFrame) { if (this.codec == null) { await this._initialize() } let transformedFrame if (sopInstanceUID in this.transformers) { const transformer = this.transformers[sopInstanceUID] if (transformer) { transformedFrame = transformer.transform(decodedFrame) } else { transformedFrame = new Promise(function (resolve) { resolve(decodedFrame) }) } } else { transformedFrame = new Promise(function (resolve) { resolve(decodedFrame) }) } return transformedFrame } } </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Namespaces</h3><ul><li><a href="annotation.html">annotation</a></li><li><a href="api.html">api</a></li><li><a href="color.html">color</a></li><li><a href="events.html">events</a></li><li><a href="mapping.html">mapping</a></li><li><a href="metadata.html">metadata</a></li><li><a href="opticalPath.html">opticalPath</a></li><li><a href="roi.html">roi</a></li><li><a href="scoord3d.html">scoord3d</a></li><li><a href="segment.html">segment</a></li><li><a href="utils.html">utils</a></li><li><a href="viewer.html">viewer</a></li></ul><h3>Classes</h3><ul><li><a href="annotation.AnnotationGroup.html">AnnotationGroup</a></li><li><a href="color.PaletteColorLookupTable.html">PaletteColorLookupTable</a></li><li><a href="mapping.ParameterMapping.html">ParameterMapping</a></li><li><a href="mapping.Transformation.html">Transformation</a></li><li><a href="metadata.Comprehensive3DSR.html">Comprehensive3DSR</a></li><li><a href="metadata.MicroscopyBulkSimpleAnnotations.html">MicroscopyBulkSimpleAnnotations</a></li><li><a href="metadata.ParametricMap.html">ParametricMap</a></li><li><a href="metadata.Segmentation.html">Segmentation</a></li><li><a href="metadata.SOPClass.html">SOPClass</a></li><li><a href="metadata.VLWholeSlideMicroscopyImage.html">VLWholeSlideMicroscopyImage</a></li><li><a href="module.exports_module.exports.html">exports</a></li><li><a href="opticalPath.OpticalPath.html">OpticalPath</a></li><li><a href="roi.ROI.html">ROI</a></li><li><a href="scoord3d.Ellipse.html">Ellipse</a></li><li><a href="scoord3d.Ellipsoid.html">Ellipsoid</a></li><li><a href="scoord3d.Multipoint.html">Multipoint</a></li><li><a href="scoord3d.Point.html">Point</a></li><li><a href="scoord3d.Polygon.html">Polygon</a></li><li><a href="scoord3d.Polyline.html">Polyline</a></li><li><a href="scoord3d.Scoord3D.html">Scoord3D</a></li><li><a href="segment.Segment.html">Segment</a></li><li><a href="viewer.LabelImageViewer.html">LabelImageViewer</a></li><li><a href="viewer.OverviewImageViewer.html">OverviewImageViewer</a></li><li><a href="viewer.VolumeImageViewer.html">VolumeImageViewer</a></li></ul><h3>Global</h3><ul><li><a href="global.html#addTask">addTask</a></li><li><a href="global.html#cancelTask">cancelTask</a></li><li><a href="global.html#decode">decode</a></li><li><a href="global.html#getStatistics">getStatistics</a></li><li><a href="global.html#handleMessageFromWorker">handleMessageFromWorker</a></li><li><a href="global.html#initialize">initialize</a></li><li><a href="global.html#loadWebWorkerTask">loadWebWorkerTask</a></li><li><a href="global.html#setTaskPriority">setTaskPriority</a></li><li><a href="global.html#spawnWebWorker">spawnWebWorker</a></li><li><a href="global.html#startTaskOnWebWorker">startTaskOnWebWorker</a></li><li><a href="global.html#terminateAllWebWorkers">terminateAllWebWorkers</a></li><li><a href="global.html#transform">transform</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.10</a> on Thu Sep 29 2022 16:54:54 GMT-0400 (Eastern Daylight Time) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>