如何确定ImageSource 的像素大小? ImageSource对象具有高度和宽度属性,但它们返回的大小为1/96英寸..
答案 0 :(得分:5)
答案 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];