PageSourceSearch

https://malawiheritage.net/map/js/geotiff/rgb.js

js malawiheritage.net collected 2026-10-05 02:45:05 UTC 3,700 bytes, 122 lines download raw bytes

1"use strict";
2
3function fromWhiteIsZero(raster, max, width, height) {
4  var rgbRaster = new Uint8Array(width * height * 3);
5  var value;
6  for (var i = 0, j = 0; i < raster.length; ++i, j += 3) {
7    value = 256 - raster[i] / max * 256;
8    rgbRaster[j] = value;
9    rgbRaster[j + 1] = value;
10    rgbRaster[j + 2] = value;
11  }
12  return rgbRaster;
13}
14
15function fromBlackIsZero(raster, max, width, height) {
16  var rgbRaster = new Uint8Array(width * height * 3);
17  var value;
18  for (var i = 0, j = 0; i < raster.length; ++i, j += 3) {
19    value = raster[i] / max * 256;
20    rgbRaster[j] = value;
21    rgbRaster[j + 1] = value;
22    rgbRaster[j + 2] = value;
23  }
24  return rgbRaster;
25}
26
27function fromPalette(raster, colorMap, width, height) {
28  var rgbRaster = new Uint8Array(width * height * 3);
29  var greenOffset = colorMap.length / 3;
30  var blueOffset = colorMap.length / 3 * 2;
31  for (var i = 0, j = 0; i < raster.length; ++i, j += 3) {
32    var mapIndex = raster[i];
33    rgbRaster[j] = colorMap[mapIndex] / 65536 * 256;
34    rgbRaster[j + 1] = colorMap[mapIndex + greenOffset] / 65536 * 256;
35    rgbRaster[j + 2] = colorMap[mapIndex + blueOffset] / 65536 * 256;
36  }
37  return rgbRaster;
38}
39
40function fromCMYK(cmykRaster, width, height) {
41  var rgbRaster = new Uint8Array(width * height * 3);
42  var c, m, y, k;
43  for (var i = 0, j = 0; i < cmykRaster.length; i += 4, j += 3) {
44    c = cmykRaster[i];
45    m = cmykRaster[i + 1];
46    y = cmykRaster[i + 2];
47    k = cmykRaster[i + 3];
48
49    rgbRaster[j] = 255 * ((255 - c) / 256) * ((255 - k) / 256);
50    rgbRaster[j + 1] = 255 * ((255 - m) / 256) * ((255 - k) / 256);
51    rgbRaster[j + 2] = 255 * ((255 - y) / 256) * ((255 - k) / 256);
52  }
53  return rgbRaster;
54}
55
56function fromYCbCr(yCbCrRaster, width, height) {
57  var rgbRaster = new Uint8Array(width * height * 3);
58  var y, cb, cr;
59  for (var i = 0, j = 0; i < yCbCrRaster.length; i += 3, j += 3) {
60    y = yCbCrRaster[i];
61    cb = yCbCrRaster[i + 1];
62    cr = yCbCrRaster[i + 2];
63
64    rgbRaster[j] = y + 1.40200 * (cr - 0x80);
65    rgbRaster[j + 1] = y - 0.34414 * (cb - 0x80) - 0.71414 * (cr - 0x80);
66    rgbRaster[j + 2] = y + 1.77200 * (cb - 0x80);
67  }
68  return rgbRaster;
69}
70
71// converted from here:
72// http://de.mathworks.com/matlabcentral/fileexchange/24010-lab2rgb/content/Lab2RGB.m
73// still buggy
74function fromCIELab(cieLabRaster, width, height) {
75  var T1 = 0.008856;
76  var T2 = 0.206893;
77  var MAT = [3.240479, -1.537150, -0.498535, -0.969256, 1.875992, 0.041556, 0.055648, -0.204043, 1.057311];
78  var rgbRaster = new Uint8Array(width * height * 3);
79  var L, a, b;
80  var fX, fY, fZ, XT, YT, ZT, X, Y, Z;
81  for (var i = 0, j = 0; i < cieLabRaster.length; i += 3, j += 3) {
82    L = cieLabRaster[i];
83    a = cieLabRaster[i + 1];
84    b = cieLabRaster[i + 2];
85
86    // Compute Y
87    fY = Math.pow((L + 16) / 116, 3);
88    YT = fY > T1;
89    fY = (YT !== 0) * (L / 903.3) + YT * fY;
90    Y = fY;
91
92    fY = YT * Math.pow(fY, 1 / 3) + (YT !== 0) * (7.787 * fY + 16 / 116);
93
94    // Compute X
95    fX = a / 500 + fY;
96    XT = fX > T2;
97    X = XT * Math.pow(fX, 3) + (XT !== 0) * ((fX - 16 / 116) / 7.787);
98
99    // Compute Z
100    fZ = fY - b / 200;
101    ZT = fZ > T2;
102    Z = ZT * Math.pow(fZ, 3) + (ZT !== 0) * ((fZ - 16 / 116) / 7.787);
103
104    // Normalize for D65 white point
105    X = X * 0.950456;
106    Z = Z * 1.088754;
107
108    rgbRaster[j] = X * MAT[0] + Y * MAT[1] + Z * MAT[2];
109    rgbRaster[j + 1] = X * MAT[3] + Y * MAT[4] + Z * MAT[5];
110    rgbRaster[j + 2] = X * MAT[6] + Y * MAT[7] + Z * MAT[8];
111  }
112  return rgbRaster;
113}
114
115module.exports = {
116  fromWhiteIsZero: fromWhiteIsZero,
117  fromBlackIsZero: fromBlackIsZero,
118  fromPalette: fromPalette,
119  fromCMYK: fromCMYK,
120  fromYCbCr: fromYCbCr,
121  fromCIELab: fromCIELab
122};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.