Как я могу проверить глубину цвета растрового изображения?
-
23-09-2019 - |
Вопрос
Я работаю над приложением, которое печатает папку с файлами изображений, включая 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
Это будет соответствовать одному из значений в Система.Рисование.Визуализация.Формат пикселей
Хотя вы хотели бы отправить на черно-белый принтер не только черно-белые изображения, вам также следует отправить туда любые оттенки серого.