Размер пикселя ImageSource - PullRequest
       15

Размер пикселя ImageSource

6 голосов
/ 18 июля 2009

Как определить размер ImageSource в пикселях ? Объект ImageSource имеет свойство Height и Width, но они возвращают размер в 1/96 дюйма.

Ответы [ 4 ]

6 голосов
/ 20 июля 2009

Существует 2 типа ImageSource: DrawingImage и BitmapSource .

Очевидно, DrawingImage не имеет DPI или ширины в пикселях, потому что по сути это векторная графика.

С другой стороны, BitmapSource имеет PixeWidth / PixelHeight, а также DpiX / DpiY.

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

6 голосов
/ 18 июля 2009

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

4 голосов
/ 02 сентября 2016

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

(ImageSource.Source as BitmapSource).PixelWidth
(ImageSource.Source as BitmapSource).PixelHeight
0 голосов
/ 05 октября 2013

Заимствование из того, что я нашел здесь Я придумал:

Внутри тега изображения в 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...