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(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; }, };