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.