Как найти DPI изображения, если он не установлен, WPF/WIC?

У меня тут небольшая проблема. Я изменяю размер изображения, используя следующий фрагмент кода:

public static BitmapFrame FastResize(BitmapFrame image, int width, int height) {
    var scaleX = width / image.Width * 96 / image.DpiX;
    var scaleY = height / image.Height * 96 / image.DpiY;
    var target = new TransformedBitmap(image, new ScaleTransform(scaleX, scaleY, 0, 0));
    return BitmapFrame.Create(target);
}

Проблема в том, что я вычисляю значение scaleX и scaleY. Некоторые изображения имеют DPI, но некоторые из них имеют 0.00, или я могу предположить, что DPI не установлен для этих изображений. И в результате у меня есть значение Infinity для этих двух переменных scaleX и scaleY. Поскольку значение image.DpiX и image.DpiY равно 0.00. Ну, это не исключение Attempt to divide by zero.

Чтобы добиться высокого и ожидаемого качества после процесса масштабирования/изменения размера изображения, мне нужно вычислить scaleX и scaleY таким образом: width / image.Width * 96 / image.DpiX. Однако, как я уже упоминал, некоторые изображения не имеют установленного DPI.

Итак, мой вопрос: что мне делать в этом случае, если изображение не имеет установленного DPI, чтобы предотвратить значение Infinity для этих переменных? Есть ли значение DPI по умолчанию, которое мы можем использовать для изображений, если оно не установлено? Или может быть способ расчета PDI программно с использованием WPF/WIC (WPF и Windows Imaging Component), даже если он не установлен?


person user3332579    schedule 20.03.2014    source источник


Ответы (1)


Проверьте, все ли ваши изображения основаны на пикселях. Векторные изображения не имеют DPI.

person GregoryHouseMD    schedule 20.03.2014
comment
Спасибо за ответ. Ну, моей программе все равно, является ли изображение пиксельным или векторным. Он должен масштабировать любое предоставленное изображение. Допустим, изображение основано на векторе, тогда как я могу вычислить значение переменных scaleX и scaleY в этом случае? - person user3332579; 21.03.2014
comment
Тогда есть ваша проблема, вы должны сначала проверить, является ли изображение векторным пикселем, прочитайте это описание различий между векторными и пиксельными изображениями, оно должно прояснить ситуацию - person GregoryHouseMD; 21.03.2014
comment
может ли изображение Jpeg быть векторным? Я только что проверил одно изображение в формате jpeg, для которого не задано значение DPI. Изображение сделано с помощью iPhone. - person user3332579; 21.03.2014
comment
Когда вы принимаете все типы изображений, задействовано множество параметров, поэтому я предлагаю вам ознакомиться со всеми ними. JPEG не требует DPI например, поэтому, возможно, используйте переключатель и в зависимости от типа изображения по-разному обрабатывайте масштабирование. - person GregoryHouseMD; 21.03.2014