From cf4265eebf5ecd06a2d0a8ae7644c98b004dda0a Mon Sep 17 00:00:00 2001 From: HF Date: Tue, 21 Jun 2022 10:44:40 +0200 Subject: [PATCH] fix daily backup --- src/core/Palette.js | 25 +++++++++++++++++++++---- src/core/tilesBackup.js | 8 +------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/core/Palette.js b/src/core/Palette.js index 75a24c6..ced7558 100644 --- a/src/core/Palette.js +++ b/src/core/Palette.js @@ -123,17 +123,23 @@ class Palette { /* * Take a buffer of indexed pixels and output it as RGB Array * @param chunkBuffer Buffer of indexed pixels + * @param targetLength Optional integer of length of chunk + * (will be padded or cut to its size) * @return RGB Buffer */ - buffer2RGB(chunkBuffer) { - const { length } = chunkBuffer; + buffer2RGB(chunkBuffer, targetLength = null) { + let minLength = chunkBuffer.length; + let length = minLength; + if (targetLength) { + minLength = Math.min(targetLength, minLength); + length = targetLength; + } const colors = new Uint8Array(length * 3); let color; let value; const { rgb } = this; - let c = 0; - for (let i = 0; i < length; i++) { + for (let i = 0; i < minLength; i++) { value = chunkBuffer[i]; color = (value & 0x3F) * 3; @@ -141,6 +147,17 @@ class Palette { colors[c++] = rgb[color++]; colors[c++] = rgb[color]; } + + if (minLength < length) { + const blankR = rgb[0]; + const blankG = rgb[1]; + const blankB = rgb[2]; + for (let i = minLength; i < length; i += 1) { + colors[c++] = blankR; + colors[c++] = blankG; + colors[c++] = blankB; + } + } return colors; } diff --git a/src/core/tilesBackup.js b/src/core/tilesBackup.js index fe419fb..9ff2cbe 100644 --- a/src/core/tilesBackup.js +++ b/src/core/tilesBackup.js @@ -279,13 +279,7 @@ export async function createPngBackup( } if (chunk && chunk.length) { try { - const tileBuffer = new Uint32Array(TILE_SIZE ** 2); - const chunkLength = chunk.length; - const { abgr } = palette; - for (let i = 0; i < chunkLength; i += 1) { - tileBuffer[i] = abgr[chunk[i] & 0x3F]; - } - + const tileBuffer = palette.buffer2RGB(chunk, TILE_SIZE ** 2); const filename = `${xBackupDir}/${y}.png`; // eslint-disable-next-line no-await-in-loop