diff --git a/lib/bitmapper.js b/lib/bitmapper.js index 217da6a..2591b95 100644 --- a/lib/bitmapper.js +++ b/lib/bitmapper.js @@ -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) {