C# 图像源的像素大小

C# 图像源的像素大小,c#,wpf,image,C#,Wpf,Image,如何确定图像源的大小(以像素为单位)?ImageSource对象具有“高度”和“宽度”属性,但它们返回的大小以1/96英寸为单位。必须将该值与Windows的DPI分辨率相乘,才能获得物理像素的数量。获取DPI分辨率的一种方法是获取对象并读取其属性。有两种类型的图像源:DrawingImage和BitmapSource 显然,DrawingImage没有DPI或像素宽度,因为它本质上是矢量图形 另一方面,BitmapSource具有像素宽度/像素高度以及DpiX/DpiY 借用我的发现,我想出了

如何确定图像源的大小(以像素为单位)?ImageSource对象具有“高度”和“宽度”属性,但它们返回的大小以1/96英寸为单位。

必须将该值与Windows的DPI分辨率相乘,才能获得物理像素的数量。获取DPI分辨率的一种方法是获取对象并读取其属性。

有两种类型的图像源:DrawingImageBitmapSource

显然,DrawingImage没有DPI或像素宽度,因为它本质上是矢量图形

另一方面,BitmapSource具有像素宽度/像素高度以及DpiX/DpiY


借用我的发现,我想出了:

在XAML中的图像标记内部执行以下操作:

<Image.Resources>
    <c:StringJoinConverter x:Key="StringJoin" />
</Image.Resources>
<Image.Tag>
    <!-- Get Image's actual width & height and store it in the control's Tag -->
    <MultiBinding Converter="{StaticResource StringJoin}">
        <Binding RelativeSource="{RelativeSource Self}" Path="Source.PixelWidth" />
        <Binding RelativeSource="{RelativeSource Self}" Path="Source.PixelHeight" />
    </MultiBinding>
</Image.Tag>
然后创建转换器:

public class StringJoinConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Join((parameter ?? ",").ToString(), values);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
然后,您可以使用以下方法提取图像的实际(像素)宽度和高度:

var tag = imageControl.Tag; // width,height
List<double> size = tag.ToString()
                       .Split(',')
                       .Select(d => Convert.ToDouble(d))
                       .ToList();
double imageWidth = size[0],
       imageHeight = size[1];
var tag=imageControl.tag;//宽度、高度
列表大小=tag.ToString()
.Split(“,”)
.Select(d=>Convert.ToDouble(d))
.ToList();
双图像宽度=大小[0],
图像高度=大小[1];

这是一篇非常古老的文章,但对于其他对此有问题的人来说,你不必做任何疯狂或复杂的事情

(ImageSource.Source as BitmapSource).PixelWidth
(ImageSource.Source as BitmapSource).PixelHeight

谢谢,它给出了真实的宽度和高度在像素!
(ImageSource.Source as BitmapSource).PixelWidth
(ImageSource.Source as BitmapSource).PixelHeight