2012-05-23 2 views
0

Как я могу взять BMP, который составляет 24 бита, и преобразовать его в монохромный битмап? Я не беспокоюсь о потере цветов и т. Д., И я не хочу использовать другой формат файла.Преобразование 24-битного BMP в монохромный бит в C#

+0

Что означают следующие значения rgb: (1,1,1) [Один больше черного], (2097151,2097151,2097151) [На полпути между белым и черным], (4194302,4194302,4194302) [Один меньше белого]? –

ответ

3

Существует в основном два метода. Вы можете использовать методы Interop для чтения необработанных данных BMP и записи необработанных данных BMP для монохромного растрового изображения. Есть функции googlable, которые сделают это.

Или, лучше, вы можете использовать ImageMagickObject для преобразования изображения с помощью стехикального сглаживания.

Сделайте второй.

Если вы делаете первый, вы все равно должны использовать stocichastic dither, но вам придется реализовать его вручную.

Редактировать: Вы спросили «что означают следующие значения RGB» ... ответ заключается в том, что они становятся тем, кем вы хотите стать. ВАМ РЕШАТЬ.

Очевидным выбором является либо использование строгого порога, когда что-либо меньшее, чем X, становится черным, что-то еще становится белым, или вы можете использовать стехистальный спуск. Выберите два порога, черный порог bt и белый порог wt, такой как 0 < bt < wt < 255. Затем для каждой точки выберите случайное число q между 0.0. и 1.0. Сравните яркость пикселей ((r+g+b)/3) до (q*(wt-bt)+bt). Если он больше или равен, он белый, если меньше, черный. Это даст вам приятный оттенок серого. Для большинства целей 31 и 224 являются хорошими значениями для bt и wt, но для фотографических изображений 0 и 255 может быть лучше.

Смежные вопросы