c# - 如果未设置图像的 DPI,WPF/WIC,如何找到它?

标签 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。结果,我为这两个 scaleXscaleY 变量赋值 Infinity。因为image.DpiXimage.DpiY的值为0.00。嗯,它不会抛出 Attempt to divide by zero 异常。

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

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

最佳答案

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

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

相关文章:

c# - 我的第一个非重复字符算法的缺陷在哪里?

c# - Azure AD 允许匿名

c# - 有没有办法防止某些引用被包含在项目中?

c# - WPF 通过网格本身向 DataGrid 添加行

WPF:由于样式和/或修改的列表框,Groupstyle 无法正常工作

WPF XAML 绑定(bind)和 CurrentCulture 显示

android - 增加 RGB 强度

java - 翻转图像

c# - 悲观地锁定进程之间的代码

.net - 如何使用dotnet仅对jpg文件中的图像数据进行哈希处理?