Разница между Bitmap . Height и VerticalResolution.Высота и VerticalResolution

#.net #image #resolution #pixels

#.net #изображение #разрешение #пиксель

Вопрос:

В чем разница между свойствами b.Height и b.Width и свойствами b.HorizontalResolution и b.VerticalResolution в C #?

 Bitmap b = new Bitmap(@"foo.bmp");
  

Для моего примера Height = 65, Width = 375, HorizontalResolution = VerticalResolution = 150,01239
. В MSDN указано, что высота и ширина указаны в пикселях, но значения HorizontalResolution и VerticalResolution равны пикселям на дюйм. Значит ли это, что это dpi, с которым это изображение было отсканировано, например, со сканера? Или это что-то другое?

Контекст вопроса следующий: я хотел бы отсканировать подпись и отобразить в ней на asp.net страница как изображение в форме. Форма представляет собой стандартную правительственную форму с четко определенным пространством для подписи. Какие соображения я должен учитывать при сканировании изображения, чтобы оно отображалось без какой-либо размытости, когда я вижу его в браузере и при печати веб-страницы.

Чего я не понимаю, так это того, сохраняют ли все форматы изображений (а) размер изображения в пикселях (высота / ширина), который браузер отобразит / изменит размер в теге image и (б) какой-либо другой эквивалент dpi, который принтер будет использовать для печати? Если нет, то от чего зависит размер изображения на печатной бумаге?

Ответ №1:

Свойство точек на дюйм важно, когда вы хотите убедиться, что изображение отображается на устройстве вывода с тем же физическим размером, что и при его создании. Лучшим примером является изображение, созданное с помощью Microsoft Paint. Пока вы работаете над этим, вы используете свой монитор. Который обычно имеет разрешение 96 пикселей на дюйм. Таким образом, изображение размером 960 x 960 будет отображаться на вашем мониторе как (примерно) изображение размером 10 x 10 дюймов.

Теперь вы печатаете это. Принтеры — это устройства с высоким разрешением, 600 точек на дюйм — это вполне нормально. Это означает, что ваше изображение размером 960 x 960 пикселей будет напечатано как изображение размером 960/600 = 1,6 x 1,6 дюйма на бумаге. Ваш красивый дизайн превратился в почтовую марку.

Очевидно, что это нежелательно, изображение необходимо изменить, чтобы на бумаге оно выглядело так же, как на мониторе. Свойство изображения dots-per-inch позволяет это сделать. Изображение.Свойства Horizontal / VerticalResolution говорят вам 96, графический файл принтера.DpiX / Y говорит вам 600, вы знаете, что вам нужно изменить масштаб на 600/96, чтобы получить изображение того же размера.

Обратите внимание, что есть побочный эффект. Каждый пиксель, который вы нарисовали в Microsoft Paint, превращается в большой двоичный объект размером 6 x 6 на бумаге из-за изменения масштаба. Пиксели на бумаге очень маленькие, поэтому изображение, скорее всего, будет выглядеть одинаково. Главное, чтобы изображение имело плавные переходы, как на фотографии. Что плохо работает, так это текст, особенно со сглаженными значениями. В противном случае, именно поэтому снимки экрана выглядят намного хуже по сравнению с отчетом, который был сгенерирован для принтера.

Комментарии:

1. Итак, если я знаю, что (а) изображение подписи должно печататься как 3 «x 4» на бумаге и (б) оно должно быть хорошо напечатано при 600 dpi, правильно ли тогда сказать, что при сканировании изображения я должен убедиться, что (а) оно имеет 1800 x 2400 пикселей (свойства высоты и ширины растрового изображения) и (б) что dpi (разрешение растрового изображения по горизонтали и вертикали) равно 600? Когда принтер печатает с разрешением 300 точек на дюйм, драйвер печати масштабирует изображение до 900 x 1200, чтобы на бумаге оно оставалось размером 3 x 4 дюйма?

2. Сканеры обычно не дают вам никакого выбора. Драйвер принтера не выполняет никакого масштабирования, это должно выполняться программным обеспечением, которое генерирует распечатку. Вы не сказали, что вы используете.

3. Спасибо за ответ, Ханс. Изображение подписи должно отображаться на веб-странице html как часть увеличенной формы, и когда пользователь использует функцию печати браузера из меню, оно должно печатать изображение размером 3 «x 4». Учитывая эту информацию, о чем я должен заботиться при сканировании? Кроме того, если действительно изображение должно иметь размер 1800 x 2400 пикселей, мне нужно установить для тега html img size значение меньшего размера (180 x 240 или что-то в этом роде), чтобы оно имело разумный размер на экране. Повлияет ли то, что я установил в качестве высоты и ширины для тега изображения, на размер изображения при печати вообще или нет?

Ответ №2:

Свойства Vertical / HorizontalResolution сообщают вам, сколько пикселей на дюйм определено как использующее это изображение. Итак, вот несколько примеров..

Изображение размером 100 на 100 пикселей при 50×50 ppi означает, что при печати изображение будет занимать 2 дюйма на 2 дюйма. (100/50)

Используя ваши цифры: 375 x 65 @ 150,01239 = ~ 2,5 x 0,43 дюйма.

Для среднего монитора компьютера установлено значение 72 ppi, но это не гарантируется.