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に依存しないようにするため、画像のサイズを自動的に変更することを理解するまでにかなり時間がかかりまし


編集

MSDNリンクが壊れています。これが新しいリンクです 。MSDNブログ-ぼやけたビットマップ。新しいリンクも機能しなくなった場合に備えて、archive.orgで使用するために古いリンクを保持しておきましょう。


10
DPI設定に関するすばらしいヒント、Paja。ツールバーアイコンのいくつかが72 DPIに設定されていたため、ピクセルのサイズが16x16であってもアイコンが大きく表示されていました。
dthrasher 2011年

わかりません。WPFは画面の解像度に応じてウィンドウのレイアウトを変えると言っていますか?良いことである可能性はありません。
カイルデラニー

@KyleDelaney回答でリンクした記事を読んだことがありますか?
パヤ2017

1
@KyleDelaneyはい、そのため、「ピクセル」ではなく「ポイント」を使用して、WPFでサイズ、距離、マージンなどを指定します。
パヤ

1
@PawełAudionysosリンク切れを修正しました
パヤ

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

この1は、とのイメージのために、私の作品600x800 pixels96dpi

@ rishad2m8サイズが不明な場合、https: //msdn.microsoft.com/en-us/library/system.drawing.image.size(v = vs.110).aspxでサイズを最初に検出できます。


1
画像サイズが不明な場合はどうなりますか?
rishad2m8 2016年

あなたは救世主です。私がこの問題にどれほど苦しんでいたか知りたくないでしょう。
デビッドアトキンソン2017年

1
UseLayoutRoundingをtrueに設定するとうまくいきました!ありがとう!
Blake Thingstad 2017年

6

幅や高さを指定しないで、代わりに次のように使用してください:

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

4

Payaの答えに追加してください:WPFモニターの解像度に適応しようとする試みを補正するには、WidthおよびHeightファイルの元の寸法に設定して使用できる必要がありますStretch="Fill"。これでうまくいきました。


0

画像を元のサイズで表示したいが、画像のサイズがわからない場合は、UIElementの背景として画像を設定するのが最善の方法だと思います。このような:

    <Button>
        <Button.Background>
            <ImageBrush ImageSource="/images/user_add.png" Stretch="None"/>
        </Button.Background>
    </Button>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.