import { JimpClass } from "@jimp/types";
export const methods = {
/**
* Apply a ordered dithering effect.
* @example
* ```ts
* import { Jimp } from "jimp";
*
* const image = await Jimp.read("test/image.png");
*
* image.dither();
* ```
*/
dither<I extends JimpClass>(image: I) {
const rgb565Matrix = [
1, 9, 3, 11, 13, 5, 15, 7, 4, 12, 2, 10, 16, 8, 14, 6,
];
image.scan((x, y, idx) => {
const thresholdId = ((y & 3) << 2) + (x % 4);
const dither = rgb565Matrix[thresholdId]!;
image.bitmap.data[idx] = Math.min(image.bitmap.data[idx]! + dither, 0xff);
image.bitmap.data[idx + 1] = Math.min(
image.bitmap.data[idx + 1]! + dither,
0xff,
);
image.bitmap.data[idx + 2] = Math.min(
image.bitmap.data[idx + 2]! + dither,
0xff,
);
});
return image;
},
};