2015-10-13 3 views
1

Это отчасти из любопытства, отчасти, чтобы быть в состоянии обосновать решение, как хранить в базе данных SQL Server:Image.HorizontalResolution и Image.VerticalResolution - зачем плавать?

Почему Image.HorizontalResolution и Image.VerticalResolution имеют тип числа с плавающей точкой? Как в этом играют «бесконечность» и «NaN»?

Ссылка: Image.HorizontalResolution Property

+0

Кто решил, что эти поля будут плавать? Сам? Библиотека, которую вы используете? Какой API? – Nayuki

+0

@NayukiMinase, .NET framework, класс изображения –

+0

Oh! Потому что «разрешение» относится к вещам типа точек на дюйм, а не к размерам пикселей. Мы знаем, что физические величины являются действительными числами, а не чистыми целыми числами. – Nayuki

ответ

1

Несколько практический ответ на этот вопрос заключается в том, что он является плавающим, потому что США не используют метрическую систему, она измеряется в дюймах. Остальной мир использует счетчики. Наличие 25,4 дюймов в метре не дает хороших круглых чисел. Форматы файлов изображений используют разные стандарты, по иронии судьбы, наиболее распространенный формат изображения, использующий метры вместо дюймов, был создан американской компанией. Формат BMP-файла использует пиксели на метр.

Более технически правильный ответ, пожалуй, состоит в том, что разрешение является конструктивным параметром датчика изображения, который использовался для создания изображения. Физическое свойство, такое как расстояние между ячейками в ПЗС-датчике. И на него воздействует объектив, используемый для проецирования сцены на датчик. Ни датчик, ни объектив не создаются с равномерно делимым числом на дюйм. Или на метр. Чипные заводы используют размеры элементов, которые измеряются в метрах. Ну, нанометры. Фокусное расстояние объектива часто регулируется, и процессор изображения не учитывает это.

Таким образом, на практике это just a reference number, и фактическое значение выбрано с хорошим круглым числом в дюймах, которое пропорционально количеству пикселей на изображении. Это гарантирует, что у вас есть шанс воспроизвести изображение на другом устройстве, например на принтере, с примерно одинаковым физическим размером. Очень общие значения - 72 и 96, значение по умолчанию для мониторов (независимо от размера монитора) и тот, который вы получаете при создании изображения с помощью программы рисования. 300 и 600 являются общими, разрешение дешевых сканеров. Держите его в два раза пропорционально сумме денег, которую вы потратили.

Единственный раз, когда я когда-либо видел его как дробное число, было в программе конвертации изображений в стиле hokey, которая смотала преобразование метра в дюйм. Усечение его вместо округления. Хранение его в dbase как целое отлично, когда вы раунд. Это никогда не бесконечность или NaN.

0

я запутался в первый из множества значений «разрешение» в контексте образов.

Когда мы говорим о разрешении с точки зрения размеров пикселей, числа всегда являются целыми числами. Например, «этот телевизор имеет разрешение 1920 × 1080».

Когда мы говорим о разрешении с точки зрения пикселей на дюйм/метр/и т. Д., Число не обязательно должно быть чистым целым числом. Мы можем иметь такие значения, как 300 DPI, 300,5 DPI, 314,159 DPI и т. Д.

Ответ: В контексте поля API Image.HorizontalResolution мы говорим о физическом разрешении, и именно поэтому для него имеет смысл больше число с плавающей запятой, а не целое число.

Смежные вопросы