@niivue/niivue
Version:
minimal webgl2 nifti image viewer
4,252 lines (4,213 loc) • 114 kB
JavaScript
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
// src/logger.ts
var _Log = class _Log {
constructor({ name = "niivue", level = "info" } = {}) {
__publicField(this, "level");
__publicField(this, "name");
this.name = `${name}`;
this.level = level;
}
debug(...args) {
if (_Log.levels[this.level] > _Log.levels.debug) {
return;
}
console.debug(`${this.name}-debug`, ...args);
}
info(...args) {
if (_Log.levels[this.level] > _Log.levels.info) {
return;
}
console.info(`${this.name}-info`, ...args);
}
warn(...args) {
if (_Log.levels[this.level] > _Log.levels.warn) {
return;
}
console.warn(`${this.name}-warn`, ...args);
}
error(...args) {
if (_Log.levels[this.level] > _Log.levels.error) {
return;
}
console.error(`${this.name}-error`, ...args);
}
fatal(...args) {
if (_Log.levels[this.level] > _Log.levels.fatal) {
return;
}
console.error(`${this.name}-fatal`, ...args);
}
setLogLevel(level) {
this.level = level;
}
setName(name) {
this.name = name;
}
};
// map 'debug' 'info' 'warn' 'error' 'fatal' 'silent' to numbers
// for comparison
__publicField(_Log, "levels", {
debug: 0,
info: 1,
warn: 2,
error: 3,
fatal: 4,
silent: Infinity
});
var Log = _Log;
var log = new Log({ name: "niivue", level: "info" });
// src/drawing/rle.ts
function encodeRLE(data) {
const dl = data.length;
let dp = 0;
const r = new Uint8Array(dl + Math.ceil(0.01 * dl));
const rI = new Int8Array(r.buffer);
let rp = 0;
while (dp < dl) {
let v = data[dp];
dp++;
let rl = 1;
while (rl < 129 && dp < dl && data[dp] === v) {
dp++;
rl++;
}
if (rl > 1) {
rI[rp] = -rl + 1;
rp++;
r[rp] = v;
rp++;
continue;
}
while (dp < dl) {
if (rl > 127) {
break;
}
if (dp + 2 < dl) {
if (v !== data[dp] && data[dp + 2] === data[dp] && data[dp + 1] === data[dp]) {
break;
}
}
v = data[dp];
dp++;
rl++;
}
r[rp] = rl - 1;
rp++;
for (let i = 0; i < rl; i++) {
r[rp] = data[dp - rl + i];
rp++;
}
}
log.debug("PackBits " + dl + " -> " + rp + " bytes (x" + dl / rp + ")");
return r.slice(0, rp);
}
function decodeRLE(rle, decodedlen) {
const r = new Uint8Array(rle.buffer);
const rI = new Int8Array(r.buffer);
let rp = 0;
const d = new Uint8Array(decodedlen);
let dp = 0;
while (rp < r.length) {
const hdr = rI[rp];
rp++;
if (hdr < 0) {
const v = rI[rp];
rp++;
for (let i = 0; i < 1 - hdr; i++) {
d[dp] = v;
dp++;
}
} else {
for (let i = 0; i < hdr + 1; i++) {
d[dp] = rI[rp];
rp++;
dp++;
}
}
}
return d;
}
// src/drawing/undo.ts
var drawUndo = ({ drawUndoBitmaps, currentDrawUndoBitmap, drawBitmap }) => {
const len = drawUndoBitmaps.length;
if (len < 1) {
log.debug("undo bitmaps not loaded");
return;
}
currentDrawUndoBitmap--;
if (currentDrawUndoBitmap < 0) {
currentDrawUndoBitmap = len - 1;
}
if (currentDrawUndoBitmap >= len) {
currentDrawUndoBitmap = 0;
}
if (drawUndoBitmaps[currentDrawUndoBitmap].length < 2) {
log.debug("drawUndo is misbehaving");
return;
}
drawBitmap = decodeRLE(drawUndoBitmaps[currentDrawUndoBitmap], drawBitmap.length);
return { drawBitmap, currentDrawUndoBitmap };
};
// src/nvdocument.ts
import { vec3 as vec313, vec4 as vec49 } from "gl-matrix";
// src/nvserializer.ts
import { vec3 as vec312 } from "gl-matrix";
// src/nvutilities.ts
import arrayEqual from "array-equal";
import { mat4, vec3, vec4 } from "gl-matrix";
// src/nvimage/index.ts
import { readHeaderAsync as readHeaderAsync4 } from "nifti-reader-js";
import { v4 as uuidv42 } from "@lukeed/uuid";
// src/nvimage/utils.ts
import { vec3 as vec32 } from "gl-matrix";
var ImageType = /* @__PURE__ */ ((ImageType3) => {
ImageType3[ImageType3["UNKNOWN"] = 0] = "UNKNOWN";
ImageType3[ImageType3["NII"] = 1] = "NII";
ImageType3[ImageType3["DCM"] = 2] = "DCM";
ImageType3[ImageType3["DCM_MANIFEST"] = 3] = "DCM_MANIFEST";
ImageType3[ImageType3["MIH"] = 4] = "MIH";
ImageType3[ImageType3["MIF"] = 5] = "MIF";
ImageType3[ImageType3["NHDR"] = 6] = "NHDR";
ImageType3[ImageType3["NRRD"] = 7] = "NRRD";
ImageType3[ImageType3["MHD"] = 8] = "MHD";
ImageType3[ImageType3["MHA"] = 9] = "MHA";
ImageType3[ImageType3["MGH"] = 10] = "MGH";
ImageType3[ImageType3["MGZ"] = 11] = "MGZ";
ImageType3[ImageType3["V"] = 12] = "V";
ImageType3[ImageType3["V16"] = 13] = "V16";
ImageType3[ImageType3["VMR"] = 14] = "VMR";
ImageType3[ImageType3["HEAD"] = 15] = "HEAD";
ImageType3[ImageType3["DCM_FOLDER"] = 16] = "DCM_FOLDER";
ImageType3[ImageType3["SRC"] = 17] = "SRC";
ImageType3[ImageType3["FIB"] = 18] = "FIB";
ImageType3[ImageType3["BMP"] = 19] = "BMP";
ImageType3[ImageType3["ZARR"] = 20] = "ZARR";
ImageType3[ImageType3["NPY"] = 21] = "NPY";
ImageType3[ImageType3["NPZ"] = 22] = "NPZ";
ImageType3[ImageType3["HDR"] = 23] = "HDR";
return ImageType3;
})(ImageType || {});
var NVIMAGE_TYPE = Object.freeze({
...ImageType,
parse: (ext) => {
let imageType = 0 /* UNKNOWN */;
switch (ext.toUpperCase()) {
case "":
case "DCM":
imageType = 2 /* DCM */;
break;
case "TXT":
imageType = 3 /* DCM_MANIFEST */;
break;
case "FZ":
case "GQI":
case "QSDR":
case "FIB":
imageType = 18 /* FIB */;
break;
case "HDR":
case "NII":
imageType = 1 /* NII */;
break;
case "MIH":
imageType = 4 /* MIH */;
break;
case "MIF":
imageType = 5 /* MIF */;
break;
case "NHDR":
imageType = 6 /* NHDR */;
break;
case "NRRD":
imageType = 7 /* NRRD */;
break;
case "MHD":
imageType = 8 /* MHD */;
break;
case "MHA":
imageType = 9 /* MHA */;
break;
case "MGH":
imageType = 10 /* MGH */;
break;
case "MGZ":
imageType = 11 /* MGZ */;
break;
case "NPY":
imageType = 21 /* NPY */;
break;
case "NPZ":
imageType = 22 /* NPZ */;
break;
case "SRC":
imageType = 17 /* SRC */;
break;
case "V":
imageType = 12 /* V */;
break;
case "V16":
imageType = 13 /* V16 */;
break;
case "VMR":
imageType = 14 /* VMR */;
break;
case "HEAD":
imageType = 15 /* HEAD */;
break;
case "PNG":
case "BMP":
case "GIF":
case "JPG":
case "JPEG":
imageType = 19 /* BMP */;
break;
case "ZARR":
imageType = 20 /* ZARR */;
break;
}
return imageType;
}
});
// src/nvimage/ImageWriter.ts
import { NIFTI1 } from "nifti-reader-js";
// src/nvimage/VolumeUtils.ts
import { vec4 as vec42 } from "gl-matrix";
// src/nvimage/ImageReaders/afni.ts
import { NIFTI1 as NIFTI12, NIFTIEXTENSION } from "nifti-reader-js";
import { mat4 as mat42, vec3 as vec33, vec4 as vec43 } from "gl-matrix";
// src/nvimage/ImageReaders/brainvoyager.ts
import { NIFTI1 as NIFTI13 } from "nifti-reader-js";
// src/nvimage/ImageReaders/dsistudio.ts
import { NIFTI1 as NIFTI14 } from "nifti-reader-js";
// src/nvimage/ImageReaders/ecat.ts
import { NIFTI1 as NIFTI15 } from "nifti-reader-js";
// src/nvimage/ImageReaders/image.ts
import { NIFTI1 as NIFTI16 } from "nifti-reader-js";
// src/nvimage/ImageReaders/itk.ts
import { NIFTI1 as NIFTI17 } from "nifti-reader-js";
import { mat3, vec3 as vec34 } from "gl-matrix";
// src/nvimage/ImageReaders/mgh.ts
import { NIFTI1 as NIFTI18 } from "nifti-reader-js";
import { mat4 as mat43 } from "gl-matrix";
// src/nvimage/ImageReaders/mrtrix.ts
import { NIFTI1 as NIFTI19 } from "nifti-reader-js";
// src/nvimage/ImageReaders/nii.ts
import { isCompressed, decompressAsync, readHeaderAsync, readImage, hasExtension } from "nifti-reader-js";
// src/nvimage/ImageReaders/nrrd.ts
import { NIFTI1 as NIFTI110 } from "nifti-reader-js";
import { mat3 as mat32, mat4 as mat44, vec3 as vec35 } from "gl-matrix";
// src/nvimage/ImageReaders/numpy.ts
import { NIFTI1 as NIFTI111 } from "nifti-reader-js";
// src/nvimage/ImageReaders/zarr.ts
import { NIFTI1 as NIFTI112 } from "nifti-reader-js";
// src/nvimage/CoordinateTransform.ts
import { mat4 as mat45, vec3 as vec36, vec4 as vec44 } from "gl-matrix";
// src/nvimage/ImageOrientation.ts
import { mat3 as mat33, mat4 as mat46, vec3 as vec37, vec4 as vec45 } from "gl-matrix";
import { readHeaderAsync as readHeaderAsync2 } from "nifti-reader-js";
// src/cmaps/index.ts
var cmaps_exports = {};
__export(cmaps_exports, {
$itksnap: () => itksnap_default,
$slicer3d: () => slicer3d_default,
actc: () => actc_default,
afni_blues_inv: () => afni_blues_inv_default,
afni_reds_inv: () => afni_reds_inv_default,
batlow: () => batlow_default,
bcgwhw: () => bcgwhw_default,
bcgwhw_dark: () => bcgwhw_dark_default,
blue: () => blue_default,
blue2cyan: () => blue2cyan_default,
blue2magenta: () => blue2magenta_default,
blue2red: () => blue2red_default,
bluegrn: () => bluegrn_default,
bone: () => bone_default,
bronze: () => bronze_default,
cet_l17: () => cet_l17_default,
cividis: () => cividis_default,
cool: () => cool_default,
copper: () => copper_default,
copper2: () => copper2_default,
ct_airways: () => ct_airways_default,
ct_artery: () => ct_artery_default,
ct_bones: () => ct_bones_default,
ct_brain: () => ct_brain_default,
ct_brain_gray: () => ct_brain_gray_default,
ct_cardiac: () => ct_cardiac_default,
ct_head: () => ct_head_default,
ct_kidneys: () => ct_kidneys_default,
ct_liver: () => ct_liver_default,
ct_muscles: () => ct_muscles_default,
ct_scalp: () => ct_scalp_default,
ct_skull: () => ct_skull_default,
ct_soft: () => ct_soft_default,
ct_soft_tissue: () => ct_soft_tissue_default,
ct_surface: () => ct_surface_default,
ct_vessels: () => ct_vessels_default,
ct_w_contrast: () => ct_w_contrast_default,
cubehelix: () => cubehelix_default,
electric_blue: () => electric_blue_default,
freesurfer: () => freesurfer_default,
ge_color: () => ge_color_default,
gold: () => gold_default,
gray: () => gray_default,
green: () => green_default,
green2cyan: () => green2cyan_default,
green2orange: () => green2orange_default,
hot: () => hot_default,
hotiron: () => hotiron_default,
hsv: () => hsv_default,
inferno: () => inferno_default,
jet: () => jet_default,
kry: () => kry_default,
linspecer: () => linspecer_default,
lipari: () => lipari_default,
magma: () => magma_default,
mako: () => mako_default,
navia: () => navia_default,
nih: () => nih_default,
plasma: () => plasma_default,
random: () => random_default,
red: () => red_default,
redyell: () => redyell_default,
rocket: () => rocket_default,
roi_i256: () => roi_i256_default,
surface: () => surface_default,
thermal: () => thermal_default,
turbo: () => turbo_default,
violet: () => violet_default,
viridis: () => viridis_default,
warm: () => warm_default,
winter: () => winter_default,
x_rain: () => x_rain_default
});
// src/cmaps/_itksnap.json
var itksnap_default = {
R: [
0,
255,
0,
0,
255,
0,
255,
255,
0,
205,
210,
102,
0,
0,
46,
255,
106,
221,
233,
165,
255,
147,
218,
75,
255,
60,
255,
255,
218,
0,
188,
255,
255,
222,
127,
139,
124,
255,
70,
0,
238,
238,
240,
245,
184,
32,
255,
25,
112,
34,
248,
245,
255,
144,
173,
65,
255,
250,
128,
50,
244,
255,
123,
255,
173,
255,
127,
255,
143,
220,
253,
255,
0,
0,
128,
255,
250,
148,
178,
255,
135,
100,
240,
250,
255,
107,
135,
0,
139,
245,
186,
255,
255,
0,
210,
255,
47,
72,
175,
128,
176,
255,
139,
240,
255,
216,
119,
219,
72,
255,
199,
154,
189,
240,
230,
0,
85,
64,
153,
205,
250,
95,
0,
255,
224,
176,
138,
30,
240,
152,
160
],
G: [
0,
0,
255,
0,
255,
255,
0,
239,
0,
133,
180,
205,
0,
139,
139,
228,
90,
160,
150,
42,
250,
112,
112,
0,
182,
179,
235,
228,
165,
128,
143,
105,
218,
184,
255,
69,
252,
255,
130,
100,
130,
232,
255,
222,
134,
178,
20,
25,
128,
139,
248,
255,
160,
238,
255,
105,
99,
240,
0,
205,
164,
255,
104,
165,
216,
192,
255,
140,
188,
20,
245,
250,
206,
255,
0,
250,
128,
0,
34,
127,
206,
149,
230,
235,
245,
142,
206,
0,
0,
245,
85,
228,
222,
191,
105,
248,
79,
61,
238,
128,
224,
240,
0,
255,
215,
191,
136,
112,
209,
0,
21,
205,
183,
248,
230,
250,
107,
224,
50,
92,
250,
158,
128,
69,
255,
196,
43,
144,
128,
251,
82
],
B: [
0,
0,
0,
255,
0,
255,
255,
213,
205,
63,
140,
170,
128,
139,
87,
225,
205,
221,
122,
42,
250,
219,
214,
130,
193,
113,
205,
196,
32,
128,
143,
180,
185,
135,
0,
19,
0,
224,
180,
0,
238,
170,
240,
179,
11,
170,
147,
112,
144,
34,
255,
250,
122,
144,
47,
225,
71,
230,
0,
50,
96,
240,
238,
0,
230,
203,
212,
0,
143,
60,
230,
240,
209,
127,
128,
205,
114,
211,
34,
80,
235,
237,
140,
215,
238,
35,
250,
139,
139,
220,
211,
181,
173,
255,
30,
220,
79,
139,
238,
0,
230,
245,
0,
255,
0,
216,
153,
147,
204,
255,
133,
50,
107,
255,
250,
154,
47,
208,
204,
92,
210,
160,
0,
0,
255,
222,
226,
255,
128,
152,
45
],
A: [
0,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255
],
I: [
0,
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
]
};
// src/cmaps/_slicer3d.json
var slicer3d_default = {
labels: [
"background",
"tissue",
"bone",
"skin",
"connective tissue",
"blood",
"organ",
"mass",
"muscle",
"foreign object",
"waste",
"teeth",
"fat",
"gray matter",
"white matter",
"nerve",
"vein",
"artery",
"capillary",
"ligament",
"tendon",
"cartilage",
"meniscus",
"lymph node",
"lymphatic vessel",
"cerebro-spinal fluid",
"bile",
"urine",
"feces",
"gas",
"fluid",
"edema",
"bleeding",
"necrosis",
"clot",
"embolism",
"head",
"central nervous system",
"brain",
"gray matter of brain",
"telencephalon",
"cerebral cortex",
"right frontal lobe",
"left frontal lobe",
"right temporal lobe",
"left temporal lobe",
"right parietal lobe",
"left parietal lobe",
"right occipital lobe",
"left occipital lobe",
"right insular lobe",
"left insular lobe",
"right limbic lobe",
"left limbic lobe",
"right striatum",
"left striatum",
"right caudate nucleus",
"left caudate nucleus",
"right putamen",
"left putamen",
"right pallidum",
"left pallidum",
"right amygdaloid complex",
"left amygdaloid complex",
"diencephalon",
"thalamus",
"right thalamus",
"left thalamus",
"pineal gland",
"midbrain",
"substantia nigra",
"right substantia nigra",
"left substantia nigra",
"cerebral white matter",
"right superior longitudinal fasciculus",
"left superior longitudinal fasciculus",
"right inferior longitudinal fasciculus",
"left inferior longitudinal fasciculus",
"right arcuate fasciculus",
"left arcuate fasciculus",
"right uncinate fasciculus",
"left uncinate fasciculus",
"right cingulum bundle",
"left cingulum bundle",
"projection fibers",
"right corticospinal tract",
"left corticospinal tract",
"right optic radiation",
"left optic radiation",
"right medial lemniscus",
"left medial lemniscus",
"right superior cerebellar peduncle",
"left superior cerebellar peduncle",
"right middle cerebellar peduncle",
"left middle cerebellar peduncle",
"right inferior cerebellar peduncle",
"left inferior cerebellar peduncle",
"optic chiasm",
"right optic tract",
"left optic tract",
"right fornix",
"left fornix",
"commissural fibers",
"corpus callosum",
"posterior commissure",
"cerebellar white matter",
"CSF space",
"ventricles of brain",
"right lateral ventricle",
"left lateral ventricle",
"right third ventricle",
"left third ventricle",
"cerebral aqueduct",
"fourth ventricle",
"subarachnoid space",
"spinal cord",
"gray matter of spinal cord",
"white matter of spinal cord",
"endocrine system of brain",
"pituitary gland",
"adenohypophysis",
"neurohypophysis",
"meninges",
"dura mater",
"arachnoid",
"pia mater",
"muscles of head",
"salivary glands",
"lips",
"nose",
"tongue",
"soft palate",
"right inner ear",
"left inner ear",
"right external ear",
"left external ear",
"right middle ear",
"left middle ear",
"right eyeball",
"left eyeball",
"skull",
"right frontal bone",
"left frontal bone",
"right parietal bone",
"left parietal bone",
"right temporal bone",
"left temporal bone",
"right sphenoid bone",
"left sphenoid bone",
"right ethmoid bone",
"left ethmoid bone",
"occipital bone",
"maxilla",
"right zygomatic bone",
"right lacrimal bone",
"vomer bone",
"right palatine bone",
"left palatine bone",
"mandible",
"neck",
"muscles of neck",
"pharynx",
"larynx",
"thyroid gland",
"right parathyroid glands",
"left parathyroid glands",
"skeleton of neck",
"hyoid bone",
"cervical vertebral column",
"thorax",
"trachea",
"bronchi",
"right lung",
"left lung",
"superior lobe of right lung",
"superior lobe of left lung",
"middle lobe of right lung",
"inferior lobe of right lung",
"inferior lobe of left lung",
"pleura",
"heart",
"right atrium",
"left atrium",
"atrial septum",
"ventricular septum",
"right ventricle of heart",
"left ventricle of heart",
"mitral valve",
"tricuspid valve",
"aortic valve",
"pulmonary valve",
"aorta",
"pericardium",
"pericardial cavity",
"esophagus",
"thymus",
"mediastinum",
"skin of thoracic wall",
"muscles of thoracic wall",
"skeleton of thorax",
"thoracic vertebral column",
"ribs",
"sternum",
"right clavicle",
"left clavicle",
"abdominal cavity",
"abdomen",
"peritoneum",
"omentum",
"peritoneal cavity",
"retroperitoneal space",
"stomach",
"duodenum",
"small bowel",
"colon",
"anus",
"liver",
"biliary tree",
"gallbladder",
"pancreas",
"spleen",
"urinary system",
"right kidney",
"left kidney",
"right ureter",
"left ureter",
"urinary bladder",
"urethra",
"right adrenal gland",
"left adrenal gland",
"female internal genitalia",
"uterus",
"right fallopian tube",
"left fallopian tube",
"right ovary",
"left ovary",
"vagina",
"male internal genitalia",
"prostate",
"right seminal vesicle",
"left seminal vesicle",
"right deferent duct",
"left deferent duct",
"skin of abdominal wall",
"muscles of abdominal wall",
"skeleton of abdomen",
"lumbar vertebral column",
"female external genitalia",
"male external genitalia",
"skeleton of upper limb",
"muscles of upper limb",
"right upper limb",
"left upper limb",
"right shoulder",
"left shoulder",
"right arm"
],
R: [
0,
128,
241,
177,
111,
216,
221,
144,
192,
220,
78,
255,
230,
200,
250,
244,
0,
216,
183,
183,
152,
111,
178,
68,
111,
85,
0,
214,
78,
218,
170,
140,
188,
216,
145,
150,
177,
244,
250,
200,
68,
128,
83,
83,
162,
162,
141,
141,
182,
182,
188,
188,
154,
154,
177,
177,
30,
30,
210,
210,
48,
48,
98,
98,
69,
166,
122,
122,
253,
145,
46,
0,
0,
250,
127,
127,
159,
159,
125,
125,
106,
106,
154,
154,
126,
201,
201,
78,
78,
174,
174,
139,
139,
148,
148,
186,
186,
99,
156,
156,
64,
64,
138,
97,
126,
194,
85,
88,
88,
88,
88,
88,
88,
88,
88,
244,
200,
250,
82,
57,
60,
92,
255,
255,
255,
255,
201,
70,
188,
177,
166,
182,
229,
229,
174,
174,
201,
201,
194,
194,
241,
203,
203,
229,
229,
255,
255,
209,
209,
248,
248,
255,
196,
255,
255,
255,
242,
242,
222,
177,
213,
184,
150,
62,
62,
62,
242,
250,
255,
177,
182,
175,
197,
197,
172,
172,
202,
224,
224,
255,
206,
210,
203,
233,
195,
181,
152,
159,
166,
218,
225,
224,
255,
184,
211,
47,
255,
173,
188,
255,
226,
253,
244,
205,
205,
186,
177,
255,
234,
204,
180,
216,
255,
205,
204,
255,
221,
0,
139,
249,
157,
203,
185,
185,
247,
247,
222,
124,
249,
249,
244,
255,
255,
227,
213,
213,
193,
216,
230,
245,
245,
241,
241,
177,
171,
217,
212,
185,
185,
198,
194,
177,
177,
177,
177,
177
],
G: [
0,
174,
214,
122,
184,
101,
130,
238,
104,
245,
63,
250,
220,
200,
250,
214,
151,
101,
156,
214,
189,
184,
212,
172,
197,
188,
145,
230,
63,
255,
250,
224,
65,
191,
60,
98,
122,
214,
250,
200,
131,
174,
146,
146,
115,
115,
93,
93,
166,
166,
135,
135,
150,
150,
140,
140,
111,
111,
157,
157,
129,
129,
153,
153,
110,
113,
101,
101,
135,
92,
101,
108,
108,
250,
150,
150,
116,
116,
102,
102,
174,
174,
146,
146,
126,
160,
160,
152,
152,
140,
140,
126,
126,
120,
120,
135,
135,
106,
171,
171,
123,
123,
95,
113,
161,
195,
188,
106,
106,
106,
106,
106,
106,
106,
106,
214,
200,
250,
174,
157,
143,
162,
244,
244,
244,
244,
121,
163,
91,
122,
84,
105,
147,
147,
122,
122,
112,
112,
142,
142,
213,
179,
179,
204,
204,
243,
243,
185,
185,
223,
223,
230,
172,
255,
250,
237,
217,
217,
198,
122,
124,
105,
208,
162,
162,
162,
206,
210,
255,
122,
228,
216,
165,
165,
138,
138,
164,
186,
186,
245,
110,
115,
108,
138,
100,
85,
55,
63,
70,
123,
130,
97,
244,
122,
171,
150,
244,
121,
95,
239,
202,
232,
217,
179,
179,
124,
122,
255,
234,
142,
119,
132,
253,
167,
168,
224,
130,
145,
150,
180,
108,
136,
102,
102,
182,
182,
154,
186,
186,
186,
170,
181,
190,
153,
141,
141,
123,
146,
158,
172,
172,
172,
172,
124,
85,
198,
188,
135,
135,
175,
98,
122,
122,
122,
122,
122
],
B: [
0,
128,
145,
101,
210,
79,
101,
144,
88,
20,
0,
220,
70,
235,
210,
49,
206,
79,
220,
211,
207,
210,
242,
100,
131,
255,
30,
130,
0,
255,
250,
228,
28,
216,
66,
83,
101,
49,
225,
215,
98,
128,
164,
164,
105,
105,
137,
137,
110,
110,
166,
166,
201,
201,
190,
190,
85,
85,
166,
166,
126,
126,
112,
112,
53,
137,
38,
38,
192,
109,
131,
112,
112,
225,
88,
88,
163,
163,
154,
154,
155,
155,
83,
83,
55,
133,
133,
141,
141,
103,
103,
177,
177,
72,
72,
135,
135,
24,
108,
108,
147,
147,
74,
158,
197,
164,
255,
215,
215,
215,
215,
215,
215,
215,
215,
49,
215,
225,
128,
110,
83,
109,
209,
209,
209,
209,
77,
117,
95,
101,
94,
107,
118,
118,
90,
90,
73,
73,
0,
0,
144,
77,
77,
109,
109,
152,
152,
85,
85,
131,
131,
138,
68,
167,
160,
145,
123,
123,
101,
101,
109,
108,
243,
114,
114,
114,
142,
139,
207,
101,
255,
244,
145,
145,
115,
115,
140,
162,
162,
217,
84,
89,
81,
112,
73,
57,
13,
27,
38,
97,
104,
76,
209,
154,
143,
103,
209,
88,
76,
172,
134,
158,
154,
108,
108,
161,
101,
220,
194,
178,
153,
105,
229,
142,
143,
199,
101,
30,
98,
111,
162,
116,
83,
83,
164,
164,
132,
223,
150,
150,
147,
158,
165,
130,
113,
113,
103,
127,
140,
147,
147,
151,
151,
92,
68,
131,
102,
134,
134,
125,
79,
101,
101,
101,
101,
101
],
A: [
0,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255
],
I: [
0,
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,
134,
135,
136,
137,
138,
139,
140,
141,
142,
143,
144,
145,
146,
147,
148,
149,
150,
151,
152,
153,
154,
155,
156,
157,
158,
159,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
174,
175,
176,
177,
178,
179,
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255
]
};
// src/cmaps/actc.json
var actc_default = {
R: [0, 0, 24, 248, 255],
G: [0, 0, 177, 254, 0],
B: [0, 136, 0, 0, 0],
A: [0, 32, 64, 78, 128],
I: [0, 64, 128, 156, 255]
};
// src/cmaps/batlow.json
var batlow_default = {
R: [1, 10, 15, 17, 21, 27, 36, 49, 65, 82, 99, 118, 140, 161, 183, 203, 222, 238, 248, 253, 253, 253, 252, 250],
G: [25, 42, 56, 68, 79, 88, 97, 105, 111, 116, 122, 127, 133, 138, 142, 146, 150, 155, 162, 170, 178, 186, 195, 204],
B: [89, 92, 95, 96, 98, 98, 96, 91, 83, 74, 64, 55, 46, 43, 49, 62, 79, 100, 126, 151, 175, 199, 223, 250],
A: [0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64],
I: [0, 11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 133, 144, 155, 166, 177, 188, 199, 210, 221, 232, 243, 255]
};
// src/cmaps/bcgwhw_dark.json
var bcgwhw_dark_default = {
R: [
0,
248,
242,
235,
229,
222,
212,
202,
193,
183,
173,
145,
117,
78,
39,
0,
0,
0,
0,
0,
0,
64,
128,
191,
255,
255,
255,
255,
255,
238,
221,
204,
214,
224,
235,
245,
255,
249,
242,
236,
229,
223,
217,
210,
204,
197,
191,
184,
176,
169,
161,
154,
146,
139,
132,
124,
117,
109,
102,
0
],
G: [
0,
251,
247,
243,
239,
235,
235,
235,
235,
235,
235,
216,
197,
174,
150,
127,
153,
178,
204,
229,
255,
255,
255,
255,
255,
220,
185,
150,
115,
77,
38,
0,
31,
61,
92,
122,
153,
138,
122,
107,
92,
77,
61,
46,
31,
15,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
B: [
0,
254,
253,
252,
251,
250,
251,
252,
253,
254,
255,
226,
198,
132,
66,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
40,
80,
120,
160,
200,
199,
198,
197,
196,
196,
195,
194,
193,
192,
191,
184,
176,
169,
161,
154,
146,
139,
132,
124,
117,
109,
102,
0
],
A: [
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256
],
I: [
0,
4,
8,
12,
16,
20,
24,
28,
32,
36,
40,
44,
48,
52,
56,
60,
64,
68,
72,
76,
80,
84,
88,
92,
96,
100,
104,
108,
112,
116,
120,
124,
128,
132,
136,
140,
144,
148,
152,
156,
160,
164,
168,
172,
176,
180,
184,
188,
192,
196,
200,
204,
208,
212,
216,
220,
224,
228,
232,
236,
240,
244,
248,
255
]
};
// src/cmaps/bcgwhw.json
var bcgwhw_default = {
R: [
255,
248,
242,
235,
229,
222,
212,
202,
193,
183,
173,
145,
117,
78,
39,
0,
0,
0,
0,
0,
0,
64,
128,
191,
255,
255,
255,
255,
255,
238,
221,
204,
214,
224,
235,
245,
255,
249,
242,
236,
229,
223,
217,
210,
204,
197,
191,
184,
176,
169,
161,
154,
146,
139,
132,
124,
117,
109,
102,
0
],
G: [
255,
251,
247,
243,
239,
235,
235,
235,
235,
235,
235,
216,
197,
174,
150,
127,
153,
178,
204,
229,
255,
255,
255,
255,
255,
220,
185,
150,
115,
77,
38,
0,
31,
61,
92,
122,
153,
138,
122,
107,
92,
77,
61,
46,
31,
15,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
B: [
255,
254,
253,
252,
251,
250,
251,
252,
253,
254,
255,
226,
198,
132,
66,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
40,
80,
120,
160,
200,
199,
198,
197,
196,
196,
195,
194,
193,
192,
191,
184,
176,
169,
161,
154,
146,
139,
132,
124,
117,
109,
102,
0
],
A: [
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256,
256
],
I: [
0,
4,
8,
12,
16,
20,
24,
28,
32,
36,
40,
44,
48,
52,
56,
60,
64,
68,
72,
76,
80,
84,
88,
92,
96,
100,
104,
108,
112,
116,
120,
124,
128,
132,
136,
140,
144,
148,
152,
156,
160,
164,
168,
172,
176,
180,
184,
188,
192,
196,
200,
204,
208,
212,
216,
220,
224,
228,
232,
236,
240,
244,
248,
255
]
};
// src/cmaps/blue2red.json
var blue2red_default = {
R: [0, 0, 0, 0, 196, 255],
G: [0, 32, 128, 128, 128, 32],
B: [0, 255, 196, 0, 0, 0],
A: [0, 128, 64, 64, 64, 128],
I: [0, 1, 64, 128, 192, 255]
};
// src/cmaps/blue2magenta.json
var blue2magenta_default = {
R: [0, 255],
G: [0, 0],
B: [255, 255],
A: [0, 128],
I: [0, 255]
};
// src/cmaps/blue2cyan.json
var blue2cyan_default = {
R: [0, 0],
G: [0, 255],
B: [255, 255],
A: [0, 128],
I: [0, 255]
};
// src/cmaps/bluegrn.json
var bluegrn_default = {
R: [0, 0, 0, 0],
G: [0, 1, 128, 255],
B: [0, 222, 127, 32],
A: [0, 0, 64, 128],
I: [0, 1, 128, 255]
};
// src/cmaps/blue.json
var blue_default = {
R: [0, 0, 0],
G: [0, 0, 0],
B: [0, 128, 255],
A: [0, 64, 128],
I: [0, 128, 255]
};
// src/cmaps/bone.json
var bone_default = {
R: [0, 103, 255],
G: [0, 126, 255],
B: [0, 165, 255],
A: [0, 76, 128],
I: [0, 153, 255]
};
// src/cmaps/bronze.json
var bronze_default = {
R: [0, 43, 103, 199, 216, 255],
G: [0, 0, 37, 155, 213, 255],
B: [0, 0, 20, 97, 201, 255],
A: [0, 44, 48, 54, 56, 56],
I: [0, 64, 128, 196, 240, 255]
};
// src/cmaps/cet_l17.json
var cet_l17_default = {
R: [
0,
9,
24,
33,
40,
46,
52,
57,
62,
66,
70,
74,
78,
81,
85,
88,
91,
94,
98,
101,
103,
106,
109,
112,
114,
117,
119,
121,
124,
126,
128,
130,
133,
135,
137,
139,
141,
143,
145,
147,
149,
151,
153,
155,
157,
159,
161,
163,
164,
166,
168,
169,
171,
172,
174,
175,
177,
178,
180,
181,
183,
184,
186,
187,
189,
190,
191,
193,
194,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
210,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
222,
223,
224,
224,
225,
226,
226,
227,
228,
228,
229,
229,
230,
231,
231,
232,
233,
233,
234,
234,
235,
235,
236,
236,
236,
237,
237,
237,
238,
238,
238,
239,
239,
239,
240,
240,
240,
241,
241,
241,
242,
242,
242,
243,
243,
243,
243,
243,
243,
243,
243,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
242,
242,
242,
242,
242,
242,
242,
242,
241,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
243,
243,
244,
244,
245,
246,
246,
247,
247,
248,
249,
249,
250,
250,
251,
251,
252,
252,
253,
253,
254,
254,
254
],
G: [
42,
41,
41,
41,
40,
40,
40,
39,
39,
39,
38,
38,
37,
37,
36,
36,
35,
35,
34,
34,
33,
32,
32,
31,
30,
30,
30,
30,
29,
29,
29,
29,
28,
28,
28,
27,
27,
27,
26,
26,
26,
25,
25,
25,
24,
24,
24,
24,
24,
25,
25,
26,
27,
27,
28,
28,
29,
30,
30,
31,
31,
32,
33,
33,
34,
34,
35,
36,
36,
37,
38,
39,
40,
42,
43,
44,
45,
47,
48,
49,
50,
51,
53,
54,
55,
56,
57,
58,
59,
60,
62,
63,
64,
65,
66,
68,
69,
71,
72,
73,
75,
76,
77,
79,
80,
81,
83,
84,
85,
87,
88,
89,
90,
92,
93,
94,
95,
97,
98,
100,
101,
102,
104,
105,
107,
108,
109,
111,
112,
113,
115,
116,
117,
119,
120,
121,
122,
124,
125,
126,
128,
129,
130,
132,
133,
134,
136,
137,
138,
140,
141,
142,
144,
145,
146,
147,
149,
150,
151,
153,
154,
155,
156,
158,
159,
160,
161,
163,
164,
165,
167,
168,
169,
170,
172,
173,
174,
175,
176,
178,
179,
180,
181,
183,
184,
185,
186,
187,
189,
190,
191,
192,
193,
194,
196,
197,
198,
199,
200,
201,
203,
204,
205,
206,
207,
208,
209,
211,
212,
213,
214,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
238,
239,
240,
241,
241,
242,
243,
244,
244,
245,
246,
247,
248,
248,
249,
250,
251,
251,
252,
253,
254,
255
],
B: [
167,
167,
166,
166,
166,
165,
165,
165,
164,
164,
164,
163,
163,
162,
162,
162,
161,
161,
161,
160,
160,
160,
159,
159,
158,
158,
157,
157,
156,
155,
155,
154,
154,
153,
153,
152,
151,
151,
150,
150,
149,
149,
148,
147,
147,
146,
146,
145,
144,
144,
143,
143,
142,
141,
141,
140,
139,
139,
138,
137,
137,
136,
135,
135,
134,
133,
133,
132,
131,
131,
130,
130,
129,
128,
128,
127,
127,
126,
125,
125,
124,
124,
123,
123,
122,
121,
121,
120,
119,
119,
118,
118,
117,
116,
116,
116,
115,
115,
114,
114,
113,
113,
113,
112,
112,
111,
111,
110,
110,
109,
109,
109,
108,
108,
107,
107,
106,
106,
106,
106,
106,
105,
105,
105,
105,
105,
105,
105,
104,
104,
104,
104,
104,
103,
103,
103,
103,
103,
102,
102,
102,
103,
103,
103,
103,
104,
104,
104,
104,
104,
105,
105,
105,
105,
106,
106,
106,
106,
106,
107,
107,
107,
107,
108,
108,
109,
110,
111,
111,
112,
113,
113,
114,
115,
115,
116,
117,
117,
118,
119,
120,
120,
121,
122,
122,
123,
124,
125,
126,
128,
129,
130,
131,
132,
134,
135,
136,
137,
138,
140,
141,
142,
143,
144,
146,
147,
148,
149,
150,
152,
153,
155,
157,
158,
160,
162,
163,
165,
167,
168,
170,
172,
173,
175,
177,
178,
180,
182,
183,
185,
187,
188,
190,
193,
196,
199,
201,
204,
207,
210,
212,
215,
218,
221,
224,
226,
229,
232,
235,
238,
240,
243,
246,
249,
252,
255
],
A: [
0,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64