Как я могу проверить глубину цвета растрового изображения?

StackOverflow https://stackoverflow.com/questions/2150504

Вопрос

Я работаю над приложением, которое печатает папку с файлами изображений, включая JPEG и TIFF.Изображения в формате TIFF обычно черно-белые (1 кадр в секунду).

После загрузки изображения я хочу определить, является ли изображение Цвет или B & W или Оттенки серого таким образом, я могу отправить изображение на нужный принтер (цветной принтер или черно-белый принтер).

Я использую Bitmap конструктор image = new Bitmap(filename); чтобы загрузить изображение.

Редактировать: Ответ на проверку глубины пикселя отлично подходит для B & W.Есть идеи по проверке того, является ли изображение в оттенках серого, без перебора каждого пикселя?

Это было полезно?

Решение

Правильный способ проверить это -:

Для файлов JPEG вам следует проверить соответствующие свойства с помощью Элементы собственности коллекция растрового изображения.Это может содержать соответствующие EXIF теги, помогающие определить разрядность.Следующим шагом было бы проанализировать Заголовок JPEG и найдите маркер "начало кадра", а затем количество компонентов в изображении.

Последний метод заключается в загрузке JPEG в растровый объект и сравнении количества пикселей с forumla (width * height * bytes_per_pixel).Таким образом, если вы загружаете растровое изображение и количество байтов фактических необработанных данных равно (ширина * высота), то вы знаете, что можно с уверенностью утверждать, что изображение имеет 1 байт на пиксель и поэтому имеет оттенки серого.

Последнее, что вы захотите проверить, - это формат пикселей самого растрового изображения.

Для РАЗМОЛВКА формат файла вы должны сделать то же самое, используя коллекцию PropertyItems и проверить соответствующий тег, упомянутый в спецификации.Если это не удается, выполните сравнение байтов изображения и, наконец, используйте свойство PixelFormat в качестве последнего средства.

Другие советы

Просто проверьте это свойство

image.PixelFormat

Это будет соответствовать одному из значений в Система.Рисование.Визуализация.Формат пикселей

Хотя вы хотели бы отправить на черно-белый принтер не только черно-белые изображения, вам также следует отправить туда любые оттенки серого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top