Как сделать так, чтобы изображение не растягивалось? - PullRequest
5 голосов
/ 01 мая 2011

[imgur удаленное изображение]

Значок слева является результатом этого кода:

    <Button Height="23" HorizontalAlignment="Left" Margin="12,276,0,0" Name="button1" VerticalAlignment="Top" Width="75">
        <StackPanel Orientation="Horizontal">
            <Image Source="Resources/add.png" Stretch="None" />
            <TextBlock Margin="5,0,0,0" Text="Add" />
        </StackPanel>
    </Button>

Справа изображено оригинальное изображение, размещенное рядом с ним с помощью Photoshop. Похоже, что добавленный с помощью кода растягивается на пиксель, вызывая некоторые искажения. Как мне это предотвратить?

Ответы [ 8 ]

8 голосов
/ 01 мая 2011

Stretch="None" должен сделать именно это.Если есть разница в способе отображения изображения, возможно, из-за того, что пиксели заканчиваются «по краю».

Вы можете попробовать установить SnapsToDevicePixels="True", чтобы избежать этого.

4 голосов
/ 01 мая 2011

Попробуйте использовать RenderOptions.BitmapScalingMode="NearestNeighbor".

Возможно, вы захотите прочитать это:

3 голосов
/ 01 мая 2011

Я на самом деле не вижу, что происходит в вашем примере, но очень распространенной причиной такого рода проблем с WPF является значение DPI в файле PNG, отличное от 96 (часто 72, если оно получено из чего-либо с наследие Mac).

2 голосов
/ 22 октября 2016

Добавление растяжки = Ни один не удерживает изображение от изменения размера

<ImageBrush ImageSource="rtgEnhanced.png" AlignmentX="Left" AlignmentY="Bottom" Stretch="None"></ImageBrush>
1 голос
/ 28 сентября 2017

PNG-изображения могут содержать то, что называется фрагментом pHYs. Этот блок определяет DPI, для которого изображение предназначено для отображения. Если DPI изображения не совпадает с DPI монитора, оно будет растянуто WPF, чтобы оно выглядело в «предполагаемом» размере. Обычно (по крайней мере, для меня) это совсем НЕ то, что я намеревался, и это вызывает большое разочарование.

Чтобы удалить «намеченное» растяжение, одним из вариантов является удаление фрагмента pHY из PNG.

Вы можете использовать инструмент типа TweakPNG для проверки и удаления pHY.

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

1 голос
/ 04 июня 2015

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

<Image Source="myImage.png" Height="48" UseLayoutRounding="True"/>
1 голос
/ 21 марта 2012

На самом деле NearestNeighbor собирается позволить движку пропускать пиксели исходного изображения при масштабировании.Если есть опция для Linear, это может работать лучше, поскольку это означает масштабирование чтения пиксель за пикселем из исходного изображения.

0 голосов
/ 28 февраля 2015

Это исправило это для меня:

В свой корневой элемент (т. Е. В главное окно) добавьте это свойство: UseLayoutRounding="True".

кредит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...