split out bitmapper

This commit is contained in:
Luke Page 2015-08-07 20:46:28 +01:00
parent adf5216a49
commit 3ddd3f11a3

View file

@ -96,6 +96,45 @@ function bitRetriever(data, depth) {
};
}
function mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) { // eslint-disable-line max-params
var imageWidth = image.width;
var imageHeight = image.height;
var imagePass = image.index;
for (var y = 0; y < imageHeight; y++) {
for (var x = 0; x < imageWidth; x++) {
var pxPos = getPxPos(x, y, imagePass);
for (var i = 0; i < 4; i++) {
var idx = pixelBppMap[bpp][i];
if (i === data.length) {
throw new Error('Ran out of data');
}
pxData[pxPos + i] = idx !== 0xff ? data[idx + rawPos] : 0xff;
}
rawPos += bpp; //eslint-disable-line no-param-reassign
}
}
return rawPos;
}
function mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) { // eslint-disable-line max-params
var imageWidth = image.width;
var imageHeight = image.height;
var imagePass = image.index;
for (var y = 0; y < imageHeight; y++) {
for (var x = 0; x < imageWidth; x++) {
var pixelData = bits.get(bpp);
var pxPos = getPxPos(x, y, imagePass);
for (var i = 0; i < 4; i++) {
var idx = pixelBppMap[bpp][i];
pxData[pxPos + i] = idx !== 0xff ? pixelData[idx] : maxBit;
}
}
bits.resetAfterLine();
}
}
exports.dataToBitMap = function(data, width, height, bpp, depth, interlace) {
if (depth !== 8) {
@ -110,7 +149,6 @@ exports.dataToBitMap = function(data, width, height, bpp, depth, interlace) {
}
var maxBit = Math.pow(2, depth) - 1;
var rawPos = 0;
var pixelData;
var images;
var getPxPos;
@ -129,34 +167,11 @@ exports.dataToBitMap = function(data, width, height, bpp, depth, interlace) {
}
for (var imageIndex = 0; imageIndex < images.length; imageIndex++) {
var imageWidth = images[imageIndex].width;
var imageHeight = images[imageIndex].height;
var imagePass = images[imageIndex].index;
for (var y = 0; y < imageHeight; y++) {
for (var x = 0; x < imageWidth; x++) {
if (depth !== 8) {
pixelData = bits.get(bpp);
}
var pxPos = getPxPos(x, y, imagePass);
//console.log(x,y,imageIndex, pxPos);
for (var i = 0; i < 4; i++) {
var idx = pixelBppMap[bpp][i];
if (depth === 8) {
if (i === data.length) {
throw new Error('Ran out of data');
}
pxData[pxPos + i] = idx !== 0xff ? data[idx + rawPos] : maxBit;
}
else {
pxData[pxPos + i] = idx !== 0xff ? pixelData[idx] : maxBit;
}
}
//console.log("R", pxData[pxPos], "G", pxData[pxPos + 1], "B", pxData[pxPos + 2], "A", pxData[pxPos + 3]);
rawPos += bpp;
}
if (depth !== 8) {
bits.resetAfterLine();
}
if (depth === 8) {
rawPos = mapImage8Bit(images[imageIndex], pxData, getPxPos, bpp, data, rawPos);
}
else {
mapImageCustomBit(images[imageIndex], pxData, getPxPos, bpp, bits, maxBit);
}
}
if (depth === 8) {