mirror of
https://github.com/danbulant/pngjs
synced 2026-07-07 12:10:59 +00:00
split out bitmapper
This commit is contained in:
parent
adf5216a49
commit
3ddd3f11a3
1 changed files with 44 additions and 29 deletions
|
|
@ -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) {
|
exports.dataToBitMap = function(data, width, height, bpp, depth, interlace) {
|
||||||
|
|
||||||
if (depth !== 8) {
|
if (depth !== 8) {
|
||||||
|
|
@ -110,7 +149,6 @@ exports.dataToBitMap = function(data, width, height, bpp, depth, interlace) {
|
||||||
}
|
}
|
||||||
var maxBit = Math.pow(2, depth) - 1;
|
var maxBit = Math.pow(2, depth) - 1;
|
||||||
var rawPos = 0;
|
var rawPos = 0;
|
||||||
var pixelData;
|
|
||||||
var images;
|
var images;
|
||||||
var getPxPos;
|
var getPxPos;
|
||||||
|
|
||||||
|
|
@ -129,34 +167,11 @@ exports.dataToBitMap = function(data, width, height, bpp, depth, interlace) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var imageIndex = 0; imageIndex < images.length; imageIndex++) {
|
for (var imageIndex = 0; imageIndex < images.length; imageIndex++) {
|
||||||
var imageWidth = images[imageIndex].width;
|
if (depth === 8) {
|
||||||
var imageHeight = images[imageIndex].height;
|
rawPos = mapImage8Bit(images[imageIndex], pxData, getPxPos, bpp, data, rawPos);
|
||||||
var imagePass = images[imageIndex].index;
|
}
|
||||||
for (var y = 0; y < imageHeight; y++) {
|
else {
|
||||||
for (var x = 0; x < imageWidth; x++) {
|
mapImageCustomBit(images[imageIndex], pxData, getPxPos, bpp, bits, maxBit);
|
||||||
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) {
|
if (depth === 8) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue