ImageSource的像素大小

时间:2009-07-18 09:10:15

标签: c# wpf image

如何确定ImageSource 的像素大小? ImageSource对象具有高度和宽度属性,但它们返回的大小为1/96英寸..

4 个答案:

答案 0 :(得分:5)

您必须将该值乘以Windows的DPI分辨率才能获得物理像素的数量。获得DPI解决方案的一种方法是获取Graphics对象并阅读其DpiXDpiY属性。

答案 1 :(得分:5)

有两种类型的ImageSource: DrawingImage BitmapSource

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

另一方面, BitmapSource 具有PixeWidth / PixelHeight以及DpiX / DpiY。

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource.pixelheight.aspx

答案 2 :(得分:3)

超级老帖,但对于其他任何有此问题的人,你不必做任何疯狂或复杂的事情。

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

答案 3 :(得分:0)

借鉴我所发现的here我想出了:

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>

您必须在您的XAML文件顶部为Converter的文件夹/命名空间设置c命名空间,如:

xmlns:c="clr-namespace:Project.Converters"

然后创建转换器:

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];