Изображения с низким разрешением не полностью отображаются в изображении WPF - PullRequest
0 голосов
/ 13 июля 2020

Итак, у меня есть UserControl, содержащий изображение

 <StackPanel>
            <Image HorizontalAlignment="Left" VerticalAlignment="Top" x:Name="RenderingImage" 
    RenderTransformOrigin="0,0"  Stretch="None" Source="{Binding}" RenderTransform="{Binding}"/>
  </StackPanel>

Все работает нормально, пока отображается изображение 96 или выше. Для изображений с меньшим разрешением DPI по какой-то причине компоненты изображения обрезают изображение

enter image description here

This is the full image and when I try to display it in the image component введите описание изображения здесь Обрезается правая сторона.

В частности, разрешение этого изображения составляет 72 точки на дюйм. Есть ли способ избежать этого, кроме изменения Stretch? Изменение Stretch на Fill / Uniform, похоже, работает, но это меняет способ, которым я реализовал масштабирование и другие события для этой спецификации c U C. Я бы хотел этого избежать. Также важно, чтобы я сохранил исходный размер изображения, и растяжение, очевидно, мне в этом не поможет.

1 Ответ

1 голос
/ 13 июля 2020

Собственная ширина и высота «независимого от устройства пикселя» в WPF 1/96 дюйма, то есть WPF dr aws с 96 DIP / дюйм или DPI.

Если вы загружаете растровое изображение с другим DPI, BitmapSource масштабируется до 96 точек на дюйм, т. Е. Его свойства Width и Height установлены на

bitmap.Width  = bitmap.PixelWidth  * 96 / bitmap.DpiX
bitmap.Height = bitmap.PixelHeight * 96 / bitmap.DpiY

Эти значения используются для размера элемента Image, когда Stretch установлен на None.

Чтобы компенсировать это масштабирование, вы можете создать растровое изображение, которое меняет масштаб, например, применяя соответствующий ScaleTransform к свойству Transform TransformedBitmap.

var scaled = new TransformedBitmap(bitmap,
    new ScaleTransform(bitmap.DpiX / 96, bitmap.DpiY / 96));

Таким образом, вы убедитесь, что Ширина и высота масштабированного растрового изображения всегда равны PixelWidth и PixelHeight.

...