decimation to <128 chars

This commit is contained in:
Brooke Vibber 2023-08-18 11:33:19 -07:00
parent 7fe0c34790
commit 260f9c53ed

View file

@ -123,6 +123,7 @@
// Convert the 4bpp pixel indices into hex strings
let blockMap = {};
let uniques = [];
/*
for (let i = 0; i < chars.length; i++) {
let char = chars[i];
let block = blocks[char];
@ -139,6 +140,43 @@
}
chars[i] = char;
}
*/
for (let threshold = 0; threshold < 16; threshold++) {
charIter:
for (let i = 0; i < chars.length; i++) {
let char = chars[i];
let block = blocks[char];
if (!block) {
debugger
throw new Error('missing block');
}
fontMatch:
for (let j = 0; j < uniques.length; j++) {
let other = uniques[j];
if (!block) {
debugger
throw new Error('missing other');
}
for (let k = 0; k < blockWidth * blockHeight; k++) {
if (Math.abs(block[k] - other[k]) > threshold) {
continue fontMatch;
}
}
// we're close enough to reuse a character
chars[i] = j;
continue charIter;
}
// add a new char
chars[i] = uniques.push(block) - 1;
}
if (uniques.length < 128) {
break;
}
// We need to decimate further
blocks = uniques;
uniques = [];
}
let span = document.querySelector('#block-count');
span.textContent = `${uniques.length}`;