如果没有设置图像的DPI,WPF / WIC怎么样?

时间:2014-03-20 20:42:24

标签: c# wpf image image-processing 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);
}

问题在于我计算scaleXscaleY的值。一些图像具有DPI,但其中一些具有0.00或者我可以假设没有为这些图像设置DPI。因此,我对这两个InfinityscaleX变量的值scaleY。因为image.DpiXimage.DpiY的值为0.00。好吧,它不会抛出Attempt to divide by zero异常。

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

所以我的问题是,如果图像没有设置DPI,我应该怎么办,以防止这些变量的值为Infinity?如果没有设置,我们可以使用默认的DPI值吗?或者可能是一种使用WPF / WIC(WPF和Windows Imaging Component)以编程方式计算PDI的方法,即使它没有设置?

1 个答案:

答案 0 :(得分:1)

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