Вам нужно использовать дизеринг. Floyd-Steinberg - это хороший алгоритм, который прост и работает быстро.
Вам не нужно переходить к 8 битам на пиксель, как предполагает другой ответ, вы можете перейти непосредственно к 16 битам на пиксель. Вы должны знать, как он разбивается на R / G / B, прежде чем начать.
Вот несколько примеров, в первую очередь это оригинальный 24-бит:
![alt text](https://i.stack.imgur.com/a2Tnj.png)
Далее идет 16-разрядное без сглаживания:
![alt text](https://i.stack.imgur.com/FmL5T.png)
Наконец, 16-битный с дизерингом Флойда-Стейнберга.
![alt text](https://i.stack.imgur.com/RAwyi.png)
P.S. Я сделал это с Paint Shop Pro, я не знаю, есть ли в Photoshop что-нибудь подобное. Вы можете сделать это и в коде.