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

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的方法吗?

最佳答案

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

关于c# - 如果未设置图像的DPI,WPF/WIC,如何查找?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22544615/

10-13 08:28