Skip to content

Instantly share code, notes, and snippets.

@zazaulola
Created July 20, 2024 05:35
Show Gist options
  • Save zazaulola/3be44f888db8eb7031ee02cfdb7b5817 to your computer and use it in GitHub Desktop.
Save zazaulola/3be44f888db8eb7031ee02cfdb7b5817 to your computer and use it in GitHub Desktop.
Grayscale Image Halftone dithering // Best algorithm
onmessage = ({ data: { data, width, height } }) => {
const add = (d, i, v) => {
if (i >= d.length) return;
d[i] += v;
};
let i = 0,
w = width * 4;
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++, i += 4) {
let curPixel = data[i];
let newPixel = curPixel < 129 ? 0 : 255;
let err = Math.floor((curPixel - newPixel) / 8);
data[i + 0] = newPixel;
data[i + 1] = newPixel;
data[i + 2] = newPixel;
add(data, i + 4, err);
add(data, i + 8, err);
add(data, i + w - 4, err);
add(data, i + w, err);
add(data, i + w + 4, err);
add(data, i + w * 2, err);
}
}
postMessage(data);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment