WPF: Як відобразити зображення в оригінальному розмірі?


98

У мене проблема з відображенням зображень у WPF.

Ось мій код:

<Button HorizontalAlignment="Left" Grid.Column="1" Grid.Row="5" Margin="0,5">
        <Button.Content>
            <StackPanel Orientation="Horizontal" Margin="10,0">
                <Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" Width="24" Height="24" />
                <TextBlock Text="添加" />
            </StackPanel>
        </Button.Content>
    </Button>

У мене є зображення оригінального розміру 32 * 32, але коли я запустив вищевказаний код, зображення розтягнеться, щоб заповнити весь простір, поза його початковим розміром. Я також встановив властивість "Stretch" на "None", але, здається, воно не працює.

Отже, як я можу виправити цю проблему? Дякую!

Відповіді:


127

Ось подібне питання. Зазвичай налаштування Stretch="None"достатньо.

Також дуже важливо, який DPI має зображення, встановлене в метаданих. Перш ніж зрозуміти, що DPI зображення відрізняється від DPI монітора (зазвичай 96), мені знадобилося досить багато часу, WPF автоматично змінить розмір зображення, оскільки він намагається бути незалежним від DPI .


EDIT

Посилання MSDN розірвано, ось нове посилання: Блог MSDN - Розмиті растрові карти . Давайте збережемо старе посилання навколо, яке буде використано для archive.org, на випадок, якщо нове посилання також перестане працювати.


10
Чудова порада щодо налаштувань DPI, Paja. Деякі з моїх піктограм на панелі інструментів були встановлені на 72 DPI, що призводить до того, що вони здаються більшими, навіть якщо розміри пікселів становлять 16x16.
dthrasher

Я не розумію. Ви кажете, що WPF буде розташовувати ваше вікно по-різному, залежно від роздільної здатності екрана? Не існує жодного способу, який міг би стати хорошою справою.
Кайл Делані

@KyleDelaney Ви читали статтю, яку я пов’язав у відповіді?
Пайя

1
@KyleDelaney Так, саме тому ви використовуєте "точки" замість "пікселів", щоб вказати розміри, відстані, поля тощо в WPF.
Пайя

1
@ PawełAudionysos Я виправив розірване посилання
Paya

7
<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" />

Цей працює для мене, для образу із 600x800 pixelsта 96dpi.

@ rishad2m8 Якщо розмір невідомий, можна визначити розмір спочатку за допомогою https://msdn.microsoft.com/en-us/library/system.drawing.image.size(v=vs.110).aspx Я б здогадався.


1
що робити, якщо розмір зображення невідомий?
rishad2m8

Ти рятівник. Ви не хочете знати, як довго я мучився над цим питанням.
Девід Аткінсон

1
Налаштування UseLayoutRounding на справжнє працювало для мене! Дякую!
Blake Thingstad

6

Спробуйте не вказувати ширину чи висоту, скористайтеся таким чином:

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />

4

Додавання відповіді PAYA в: щоб компенсувати WPFспробу «s , щоб адаптуватися до вирішення моніторів ви повинні бути в змозі встановити Widthі Heightдо первісних розмірів і використовувати файл в Stretch="Fill". Це працювало для мене.


0

Якщо ви хочете відобразити зображення з оригінальним розміром, але не знаєте розміру зображення, я думаю, що найкращим способом є встановлення зображення як фону UIElement. Подобається це:

    <Button>
        <Button.Background>
            <ImageBrush ImageSource="/images/user_add.png" Stretch="None"/>
        </Button.Background>
    </Button>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.