2

我这边有个小问题。我正在使用以下代码片段调整图像大小:

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);
}

问题是当我计算 and 的值scaleXscaleY。一些图像具有 DPI,但其中一些具有0.00或者我可以假设没有为这些图像设置 DPI。结果,我Infinity对这两个变量scaleXscaleY变量有价值。因为 和 的image.DpiXimage.DpiY0.00。好吧,它没有抛出Attempt to divide by zero异常。

为了在图像缩放/调整大小过程后达到预期的高质量,我需要计算scaleXandscaleY以这种方式:width / image.Width * 96 / image.DpiX. 但是,正如我已经提到的,有些图像没有设置 DPI。

所以我的问题是,如果图像没有设置 DPI,在这种情况下我应该怎么做,以防止Infinity这些变量有值?如果未设置,是否有可以用于图像的默认 DPI 值?或者可能是一种使用 WPF/WIC(WPF 和 Windows 映像组件)以编程方式计算 PDI 的方法,即使它没有设置?

4

1 回答 1

1

检查您的所有图像是否都是基于像素的。基于矢量的图像没有 DPI。

于 2014-03-20T20:50:24.253 回答