From 4e04c105d59437dd4dd814ae8a6a7fbf0f9a1fe0 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 23:01:55 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/x11/core/examples/smoketest/bmp.js | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 js/x11/core/examples/smoketest/bmp.js diff --git a/js/x11/core/examples/smoketest/bmp.js b/js/x11/core/examples/smoketest/bmp.js new file mode 100644 index 0000000..6aa92f0 --- /dev/null +++ b/js/x11/core/examples/smoketest/bmp.js @@ -0,0 +1,45 @@ +// http://atlc.sourceforge.net/bmp.html +// Any better format documentation? + +var fs = require('fs'); +var Pixmap = require('./pixmap').Pixmap; +var Buffer = require('buffer').Buffer; +require('../../lib/unpackbuffer').addUnpack(Buffer); + +var reversed = new Buffer(256); +for (var i=0; i < 256; ++i) +{ + var res = 0; + for (b = 0; b < 8; ++b) + { + res += ((i & (1 << b) ) >> b) << (7-b); + } + reversed[i] = res; +} + +module.exports.decodeBuffer = function(buffer) +{ + var h = buffer.unpack('CCLxxxxLLLLSSLLLL'); + var header = {}; + header.filesize = h[2]; + header.data_offset = h[3]; + header.header_size = h[4]; + header.width = h[5]; + header.height = h[6]; + header.num_planes = h[7]; + header.bpp = h[8]; + header.compression = h[9]; + header.data_size = h[10]; + header.hresolution = h[11]; // pixels per METER! + header.vresolution = h[12]; + // skipped: num colors, num important colors, palette + var data = buffer.slice(header.data_offset, header.data_offset+header.data_size); + // TODO: decode compressed bitmap + //console.log(header); + + // mirror bits & invert + for (var i=0; i < data.length; ++i) + data[i] = 255 - reversed[data[i]]; + + return new Pixmap(header.bpp, header.width, header.height, data); +} \ No newline at end of file