【问题标题】:How to find image's DPI if it is not set, WPF/WIC?如果未设置图像的 DPI,如何查找图像的 DPI,WPF/WIC?
【发布时间】: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);
}

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

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

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

【问题讨论】:

    标签: c# wpf image image-processing wic


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。好吧,我的程序并不关心图像是基于像素还是基于矢量。它需要缩放任何提供的图像。假设图像是基于矢量的,那么在这种情况下如何计算scaleXscaleY 变量的值?
    • 那是你的问题,你必须先检查图像是否是矢量od像素,阅读this关于矢量图像和像素图像之间差异的描述,它应该清楚
    • Jpeg 图像可以基于矢量吗?我刚刚检查了一张图片,它是 jpeg,并且没有设置 DPI。图片是使用 iPhone 拍摄的。
    • 当你接受所有类型的图像时,有很多参数在起作用,所以我建议你阅读所有这些参数。例如JPEG doesn't need DPI,所以可以使用开关并根据图像的类型,以不同的方式处理缩放。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2011-10-31
    相关资源
    最近更新 更多