// Generated by CoffeeScript 1.9.3 var decodeJPEG, decodeRaw, getImageData, onmessage, pixelValue, resolution, update; importScripts('pako.min.js'); importScripts('jpeg-decoder.js'); resolution = void 0; pixelValue = function(value, depth) { var pixel; pixel = { r: 255, g: 255, b: 255, a: 255 }; if (depth === 24 || depth === 32) { pixel.r = value & 0xFF; pixel.g = (value >> 8) & 0xFF; pixel.b = (value >> 16) & 0xFF; } else if (depth === 16) { pixel.r = (value & 0x1F) * (255 / 31); pixel.g = ((value >> 5) & 0x3F) * (255 / 63); pixel.b = ((value >> 11) & 0x1F) * (255 / 31); } return pixel; }; getImageData = function(d) { var data, i, j, k, l, npixels, pixel, ref, ref1, step, value; if (resolution.depth === 32) { return d.pixels; } step = resolution.depth / 8; npixels = d.pixels.length / step; data = new Uint8ClampedArray(d.w * d.h * 4); for (i = k = 0, ref = npixels - 1; 0 <= ref ? k <= ref : k >= ref; i = 0 <= ref ? ++k : --k) { value = 0; for (j = l = 0, ref1 = step - 1; 0 <= ref1 ? l <= ref1 : l >= ref1; j = 0 <= ref1 ? ++l : --l) { value = value | d.pixels[i * step + j] << (j * 8); } pixel = pixelValue(value, resolution.depth); data[i * 4] = pixel.r; data[i * 4 + 1] = pixel.g; data[i * 4 + 2] = pixel.b; data[i * 4 + 3] = pixel.a; } return data; }; decodeRaw = function(d) { d.pixels = getImageData(d); return d; }; decodeJPEG = function(d) { var raw; raw = decode(d.pixels, { useTArray: true, colorTransform: true }); d.pixels = raw.data; return d; /* blob = new Blob [d.pixels], { type: "image/jpeg" } reader = new FileReader() reader.onloadend = () -> d.pixels = reader.result postMessage d reader.readAsDataURL blob */ }; update = function(msg) { var d, data, raw; d = {}; data = new Uint8Array(msg); d.x = data[1] | (data[2] << 8); d.y = data[3] | (data[4] << 8); d.w = data[5] | (data[6] << 8); d.h = data[7] | (data[8] << 8); d.flag = data[9]; d.pixels = data.subarray(10); switch (d.flag) { case 0x0: raw = decodeRaw(d); break; case 0x1: raw = decodeJPEG(d); break; case 0x2: d.pixels = pako.inflate(d.pixels); raw = decodeRaw(d); break; case 0x3: d.pixels = pako.inflate(d.pixels); raw = decodeJPEG(d); } if (!raw) { return; } raw.pixels = raw.pixels.buffer; return postMessage(raw, [raw.pixels]); }; onmessage = function(e) { if (e.data.depth) { return resolution = e.data; } return update(e.data); };