now does a check for dupe blocks on luma16 rendering (no dither)

sometimes no decimation is needed on the sample vid
but most of the time it will need decimation from 300-500ish
down to 128 + any reverse video variants
This commit is contained in:
Brooke Vibber 2023-07-02 21:47:06 -07:00
parent 8172650c8f
commit a6e3e28057

View file

@ -24,6 +24,9 @@
<div>
<canvas id="work" width="80" height="160" class="stretchy"></canvas>
</div>
<div>
<span id="block-count">n/a</span> blocks per frame
</div>
<script type="text/javascript">
let width = 80;
@ -77,12 +80,41 @@
}
let blocks = [];
for (let y = 0; y < height / blockHeight; y++) {
for (let x = 0; x < width / blockWidth; x++) {
let i = y * (width / blockWidth) + x;
let chars = new Uint16Array(widthBlocks * heightBlocks);
for (let n = 0, y = 0; y < heightBlocks; y++) {
for (let x = 0; x < widthBlocks; x++, n++) {
let i = y * widthBlocks + x;
blocks[i] = new Uint8Array(blockWidth * blockHeight);
chars[n] = i;
for (let yy = 0; yy < blockHeight; yy++) {
for (let xx = 0; xx < blockWidth; xx++) {
let ii = yy * blockWidth + xx;
blocks[i][ii] = pixels[(y * blockHeight + yy) * width + (x * blockWidth + xx)];
}
}
}
}
// Now we have 800 blocks for 80x160 image
// But we can only use 128 + their mirror images
//
// First pass: sort.
let zero = "0".charCodeAt(0);
// Convert the 4bpp pixel indices into hex strings
let blockMap = {};
let keys = [];
for (let i = 0; i < blocks.length; i++) {
let key = blocks[i].map((n) => n.toString(16)).join('');
console.log(key);
if (!blockMap[key]) {
blockMap[key] = blocks[i];
keys.push(blockMap[key]);
}
}
let span = document.querySelector('#block-count');
span.textContent = `${keys.length}`;
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
let i = y * width + x;