The kindle PROGRAMS (such as eips) do the dithering. If you put a 256-grayscale PNG image on the kindle, then display it with "
eips -g file.png", then save the image in the framebuffer with "
dd if=/dev/fb0 of=file.raw", then load the raw image into a paint program and do a histogram analysis on it, you will see spikes for only 16 evenly-spaced shades of gray. The raw image in the framebuffer was dithered from 256 colors to 16 colors by eips. Similar dithering is done for screensaver images and for ads. I do software dithering for 256-color support in the
newtrix demo program -- you can look at my published C source code to see how I did it.
"
Invert/inverse dithering/halftoning" is the process of converting a dithered image back to grayscale. It averages pixels in "continuous tone" areas to get 8-bit color values, but original dithered pixels are retained near discontinuities (high-gradient edges in the image). This is similar to "super-resolution" upscaling, where pixel-smoothing is done in the direction of least-gradient.
When we OUTPUT to the eink display we do dithering because the hardware only supports 16 shades of gray for STATIC images (like anti-aliased text), or only 2 shades of gray (pure black and white) for ANIMATION (such as the videos in the "
geekmaster kindle video player" thread).
EDIT: For text fonts used on older laser printers, individual pixels were placed BY HAND around the edges of characters, to dither the edges in a way that was pleasing to the eye. This dithering was designed into the character bitmaps by "font artists", rather than being done by software or hardware. Because the kindles behave more like ink on paper than like light-emitting displays, these old time-tested ways of doing this give much better results when speed is important (such as on animated displays).