wip
This commit is contained in:
parent
ed9538ecc5
commit
764ce9a481
1 changed files with 21 additions and 8 deletions
29
dither4.js
29
dither4.js
|
@ -321,7 +321,7 @@ function decimate(input, palette, n) {
|
|||
|
||||
// Apply dithering with given palette
|
||||
let dither = (palette) => {
|
||||
let fitness = 0;
|
||||
let fitness = new Float64Array(line.length);
|
||||
let error = {
|
||||
right: new RGB(0, 0, 0),
|
||||
red: new Float64Array(line.length),
|
||||
|
@ -354,6 +354,13 @@ function decimate(input, palette, n) {
|
|||
output[x] = pick;
|
||||
popularity[pick]++;
|
||||
|
||||
/*
|
||||
// horiz only
|
||||
error.right.r = nextError.r;
|
||||
error.right.g = nextError.g;
|
||||
error.right.b = nextError.b;
|
||||
*/
|
||||
|
||||
error.right.r = nextError.r / 2;
|
||||
error.right.g = nextError.g / 2;
|
||||
error.right.b = nextError.b / 2;
|
||||
|
@ -376,9 +383,7 @@ function decimate(input, palette, n) {
|
|||
error.green[x + 1] += nextError.g / 8;
|
||||
error.blue[x + 1] += nextError.b / 8;
|
||||
|
||||
//fitness += error.r;
|
||||
//fitness += error.g;
|
||||
//fitness += error.b;
|
||||
fitness[x] = 1 / nextError.magnitude();
|
||||
}
|
||||
return {
|
||||
output,
|
||||
|
@ -392,7 +397,7 @@ function decimate(input, palette, n) {
|
|||
let start = Date.now();
|
||||
let decimated = palette.slice();
|
||||
while (decimated.length > n) {
|
||||
let {popularity} = dither(decimated);
|
||||
let {popularity, fitness, output} = dither(decimated);
|
||||
|
||||
// Try dropping least used color on each iteration
|
||||
let least = Infinity;
|
||||
|
@ -402,11 +407,19 @@ function decimate(input, palette, n) {
|
|||
continue; // keep black always
|
||||
}
|
||||
if (decimated[i].r == 255 && decimated[i].g == 255 && decimated[i].b == 255) {
|
||||
continue; // keep white always
|
||||
//continue; // keep white always
|
||||
}
|
||||
if (popularity[i] < least) {
|
||||
let coolFactor = popularity[i];
|
||||
/*
|
||||
for (let x = 0; x < line.length; x++) {
|
||||
if (output[x] == i) {
|
||||
coolFactor *= fitness[i];
|
||||
}
|
||||
}
|
||||
*/
|
||||
if (coolFactor < least) {
|
||||
pick = i;
|
||||
least = popularity[i];
|
||||
least = coolFactor;
|
||||
}
|
||||
}
|
||||
let old = decimated.length;
|
||||
|
|
Loading…
Reference in a new issue