Разница между Bitmap.Height и VerticalResolution - PullRequest
5 голосов
/ 03 июня 2011

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

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

Для моего образца Высота = 65, Ширина = 375, Горизонтальное разрешение = Вертикальное разрешение = 150.01239 , MSDN говорит, что высота и ширина указываются в пикселях, а HorizontalResolution и VerticalResolution - пиксели на дюйм. Итак, это означает, что это точка на дюйм, при которой это изображение было отсканировано, например, со сканера? Или это что-то еще?

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

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

Ответы [ 2 ]

11 голосов
/ 03 июня 2011

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

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

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

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

0 голосов
/ 03 июня 2011

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

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

Используя ваши номера: 375 x 65 @ 150.01239 = ~ 2,5 x 0,43 дюйма.

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

...