【发布时间】:2014-04-27 23:39:04
【问题描述】:
我这里有个小问题。我正在使用以下代码 sn-p 调整图像大小:
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。因此,我对这两个 scaleX 和 scaleY 变量具有价值 Infinity。因为image.DpiX 和image.DpiY 的值是0.00。好吧,它不会抛出 Attempt to divide by zero 异常。
为了在图像缩放/调整大小过程后达到预期的高质量质量,我需要以这种方式计算scaleX 和scaleY:width / image.Width * 96 / image.DpiX。但是,正如我已经提到的,有些图像没有设置 DPI。
所以我的问题是,如果图像没有设置 DPI,在这种情况下我应该怎么做,以防止这些变量的值 Infinity?如果未设置,是否有可以用于图像的默认 DPI 值?或者可能是一种使用 WPF/WIC(WPF 和 Windows 映像组件)以编程方式计算 PDI 的方法,即使它没有设置?
【问题讨论】:
标签: c# wpf image image-processing wic