Как я могу проверить глубину цвета растрового изображения? - PullRequest
8 голосов
/ 28 января 2010

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

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

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

РЕДАКТИРОВАТЬ: Ответ, чтобы проверить глубину пикселей отлично подходит для черно-белого. Любые идеи о том, чтобы проверить, является ли изображение в градациях серого, не просматривая каждый пиксель?

Ответы [ 2 ]

9 голосов
/ 28 января 2010

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

image.PixelFormat

Соответствует одному из значений в System.Drawing.Imaging.PixelFormat

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

3 голосов
/ 28 января 2010

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

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

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

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

Для формата файла TIFF вы должны сделать то же самое, используя коллекцию PropertyItems, и проверить соответствующий тег, указанный в спецификации. Если это не помогло, выполните сравнение байтов изображения и, наконец, используйте свойство PixelFormat в качестве последнего средства.

...