Думайте о группах пикселей как о шестиугольной сетке. Используйте функцию круга, чтобы решить, какие пиксели входят в группу. Вы можете настроить перекрытие кругов, чтобы настроить черный цвет / насыщенность вывода. Это действительно предназначено для вывода с высоким разрешением, такого как печать. Если вы делаете это для отображения на экране в качестве визуального эффекта, убедитесь, что вы используете процедуру рисования круга со сглаживанием, чтобы компенсировать низкое разрешение дисплея. (По сравнению с печатью, даже HD на самом деле не так высок.)
Если вы делаете это, потому что вам нравится эффект, это круто. Но если вы просто хотите перейти к черно-белому изображению, рассмотрите возможность использования дизеринга «Флойд-Стейнберг». Он обеспечивает высококачественные результаты и распределяет ошибку по изображению. http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering
Самый простой способ сделать это - перейти по пикселям и использовать случайность: для каждого пикселя вероятность его обратного окрашивания = затемнение исходного цвета.
Это может дать вам двухстрочный алгоритм дизеринга. Он не будет выглядеть так красиво, как Флойд-Стейнберг (потому что он отслеживает ошибки), или столь же художественно, как «плитка, а затем вставлять диски в каждую плитку так, чтобы доля черного = средняя темнота в исходной плитке», но на практике это работает довольно хорошо.
Halftoning is very efficient.
Single-level halftone: Ввод: пиксели с вашего изображения; заранее сконструированный «экран», содержащий пороговые значения. Во время выполнения: для каждого цветового канала для каждого пикселя выберите одно пороговое значение (индекс в пороговом массиве по модулю размеров массива). Одно сравнение между пикселем и порогом определяет, включено или выключено выходное значение.
Оно также распространяется на многоуровневый вывод с использованием нескольких экранов.
Интересной частью является построение экранов (пороговых массивов) ). Существует множество вариаций - кластерные точки (AM), стохастические (FM), множество вариаций и гибридов, включая синий шум и зеленый шум (AM / FM). И обычно вам нужен отдельный экран для каждого цветового канала. Традиционные групповые точечные экраны размещают свои точки в прямоугольной сетке, которую можно описать по их частоте (низкая частота = большие точки) и углу (обычно 15 ° для голубого, 75 ° для пурпурного, 90 ° для желтого и 45 ° для черного) .