C# 如何找到图像';s DPI(如果未设置),WPF/WIC?
我这里有个小问题。我正在使用以下代码段调整图像的大小:C# 如何找到图像';s DPI(如果未设置),WPF/WIC?,c#,wpf,image,image-processing,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 Transf
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
。好吧,它不会抛出试图除以零的异常
为了在图像缩放/调整大小过程后获得高质量和预期的质量,我需要以这种方式计算scaleX
和scaleY
:width/image.width*96/image.DpiX
。但是,正如我已经提到的,有些图像没有DPI设置
所以我的问题是,在这种情况下,如果图像没有DPI设置,我应该怎么做,以防止这些变量有一个值
无穷大
?如果未设置,是否有默认DPI值可用于图像?或者是一种使用WPF/WIC(WPF和Windows Imaging Component)以编程方式计算PDI的方法,即使未设置它?检查您的所有图像是否都是基于像素的。基于矢量的图像没有DPI。谢谢回复。我的程序不在乎图像是基于像素还是基于向量的。它需要缩放任何提供的图像。假设图像是基于矢量的,那么在这种情况下,我如何计算scaleX
和scaleY
变量的值呢?这就是你的问题,你必须先检查图像是否是矢量od pixel,阅读关于矢量图像和像素图像之间差异的描述,很清楚Jpeg图像可以基于矢量吗?我刚刚检查了一个图像,它是jpeg,没有DPI设置。这张图片是用iPhone拍摄的。当你接受所有类型的图片时,有很多参数在起作用,所以我建议你仔细阅读它们。例如,可以使用开关,根据图像的类型,以不同的方式处理缩放。