[WPF] プログラムで表示すると画像サイズが大きく(小さく)なる

画像を作成しWPFで取り込む場合、ペイントなどで見ると正しいサイズなのに、アプリケーションソフトウェアで表示するとpixel数が大きく(小さく)なることがある。そういうケースでちょっと調べた。

WPFの内部では、1/96inchで画像を扱う。デバイスとは独立な単位になることでプログラムで扱いやすくなる。これはPetzoldの本でも詳細に説明されている。
画像サイズをpixel数でしか考えないと、WPFで表示されたときにDPIによっては元のサイズ(pixel)ではなくなって驚く。

これについて、msdnのコミュニティに質問が来て、回答がついていた。

How do I keep an image from being stretched when Stretch=”None” doesn’t work?
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/fc0d6f1a-fdfe-4d82-880d-9fcfb014feb2

質問者の場合は、24×24の画像を表示すると 32×32になっているようだ。xamlの image 要素には、stretch=”None”として伸縮しないように指定しているのになぜ?という質問。

DPIに左右されないようにする簡単な方法はxaml内でWidthやHeightをbindしてソースのピクセル数に合わせること。この質問のanswerにあるように指定する。

<Image Stretch="Fill" Width="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelWidth}" Height="{Binding RelativeSource={RelativeSource Self}, Path=Source.PixelHeight}"/>

コメントを残す