Mon 21 Jul 22:43:21 CEST 2025

This commit is contained in:
sbosse 2025-07-21 23:05:44 +02:00
parent ddba06ce66
commit 1fb0b97f49

View File

@ -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);
}