2009-07-18 3 views

ответ

5

Вам нужно умножить значение с разрешением DPI Windows, чтобы получить количество физических пикселей. Один из способов получить разрешение DPI - получить объект Graphics и прочитать его свойства DpiX и DpiY.

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> 

Вы должны настроить свой c пространство имен в верхней вашего файла XAML для папки/пространства имен вашего конвертора, например:

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

Супер старый пост, но для кого возникли проблемы с этим вам не нужно делать ничего сумасшедшего или сложного.

(ImageSource.Source as BitmapSource).PixelWidth 
(ImageSource.Source as BitmapSource).PixelHeight 
Смежные вопросы