WPF:如何以原始大小显示图像?

我在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的图像,但是当我运行上面的代码时,图像将拉伸以填充所有空间,超出其原始大小。 我还设置了&#34; Stretch&#34; 财产到&#34;没有&#34;,但似乎它不起作用。

那么,我该如何解决这个问题呢?谢谢!

jiluo asked 2019-08-13T23:20:25Z
4个解决方案
121 votes

这是一个类似的问题。 一般设置Stretch="None"就足够了。

DPI在元数据中设置图像也非常重要。 我花了很长时间才弄清楚如果图像的DPI与显示器的DPI(通常是96)不同,WPF将自动调整图像大小,因为它试图与DPI无关。

Paya answered 2019-08-13T23:20:46Z
7 votes
<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" />

这个适用于我,对于600x800 pixels96dpi的图像。

@ rishad2m8如果大小未知,可以先用[https://msdn.microsoft.com/en-us/library/system.drawing.image.size(v=vs.110).aspx]检测大小。我&#39 ;猜猜。

Ulrich-Lorenz Schlüter answered 2019-08-13T23:21:19Z
6 votes

尽量不要指定宽度或高度,请改为使用它:

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />
VoodooChild answered 2019-08-13T23:21:43Z
3 votes

添加到Paya的回答:要补偿WPF尝试适应显示器分辨率,您应该能够将WidthHeight设置为文件的原始尺寸并使用Stretch="Fill".这对我有用。

sorrymissjackson answered 2019-08-13T23:22:09Z
translate from https://stackoverflow.com:/questions/3055550/wpf-how-to-display-an-image-at-its-original-size