Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
ddba06ce66
commit
1fb0b97f49
45
js/x11/examples/smoketest/bmp.js
Normal file
45
js/x11/examples/smoketest/bmp.js
Normal 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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user