UNPKG

pixelbutler

Version:

Low-res bitmap render engine for big screens

54 lines (53 loc) 1.93 kB
'use strict'; function clearAlpha(data) { var lim = data.length; for (var i = 3; i < lim; i++) { data[i] = 255; } } var CanvasRender = (function () { function CanvasRender(bitmap, canvas) { this.canvas = canvas; this.px = bitmap.data; this.width = bitmap.width; this.height = bitmap.height; this.channels = bitmap.useAlpha ? 4 : 3; this.ctx = this.canvas.getContext('2d'); this.output = this.ctx.createImageData(this.canvas.width, this.canvas.height); clearAlpha(this.output.data); this.ctx.putImageData(this.output, 0, 0); } CanvasRender.prototype.resize = function () { if (this.output.width !== this.canvas.width || this.output.height !== this.canvas.height) { this.output = this.ctx.createImageData(this.canvas.width, this.canvas.height); clearAlpha(this.output.data); } }; CanvasRender.prototype.update = function () { var data = this.output.data; var width = this.output.width; var height = this.output.height; var fx = this.width / width; var fy = this.height / height; for (var iy = 0; iy < height; iy++) { for (var ix = 0; ix < width; ix++) { var x = Math.floor(ix * fx); var y = Math.floor(iy * fy); var read = (x + y * this.width) * this.channels; var write = (ix + iy * width) * 4; data[write] = this.px[read]; data[write + 1] = this.px[read + 1]; data[write + 2] = this.px[read + 2]; } } this.ctx.putImageData(this.output, 0, 0); }; CanvasRender.prototype.destruct = function () { this.px = null; this.ctx = null; this.canvas = null; this.output = null; }; return CanvasRender; })(); module.exports = CanvasRender;