【C#/WPF】画像サイズの挙動について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
SUE
記事: 41
登録日時: 8年前

【C#/WPF】画像サイズの挙動について

#1

投稿記事 by SUE » 6年前

こんばんは。今回はWPFを使っていたときの問題です。

WPFのImageコントロールに画像を読み込んだとき、例えば64x64の画像であれば、勝手に85x85にリサイズされてしまいます。StretchをNONEにしてもUniformにしても無駄でした。
論理ピクセルと物理ピクセルの兼ね合いの問題なのかなと思いきや、その他の場面でpixelを指定すると全て物理ピクセルと1:1でちゃんと表示されました。
結果、全体としては表示が乱れて思うような操作ができません。

この挙動について、解決策をどうかご教示お願いします。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】

アバター
雨ガエル
記事: 34
登録日時: 7年前
住所: 新潟
連絡を取る:

Re: 【C#/WPF】画像サイズの挙動について

#2

投稿記事 by 雨ガエル » 6年前

WPFはあまり使ったことが無いのですが、試してみました。
自分の環境ではBMP画像を指定すると拡大されて表示されました。

これはBMPファイルの解像度の情報を元に描画していて、
その解像度とディスプレイの解像度に違いがあることによって生じる問題らしいです。

解決策としては、
1. PNGやJpg形式の画像を使う
2. bmpの解像度をディスプレイに合わせる
だと思います。

参考URL:Bitmap(ビットマップ)ファイルをDrawImageで描画すると勝手に拡大・縮小されてしまう - DrawImageで描画される画像の大きさが変わる
参考URL2:[C#] ビットマップ画像の解像度をディスプレイの解像度に合わせて画面に描画する

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: 【C#/WPF】画像サイズの挙動について

#3

投稿記事 by YuO » 6年前

SUE さんが書きました:WPFのImageコントロールに画像を読み込んだとき、例えば64x64の画像であれば、勝手に85x85にリサイズされてしまいます。StretchをNONEにしてもUniformにしても無駄でした。
論理ピクセルと物理ピクセルの兼ね合いの問題なのかなと思いきや、その他の場面でpixelを指定すると全て物理ピクセルと1:1でちゃんと表示されました。
結果、全体としては表示が乱れて思うような操作ができません。
この,85x85というのはどのようにして測定された値でしょうか。
こちらで単純にImageやViewBoxに入れたImageに,64x64の画像をSourceに設定し,
ActualWidth/ActualHeightのプロパティ値を調べても,ほぼ64 (8/1000ほど大きな値が返ってきました) になります。
これは,100%/125%どちらの環境でも同じ値になります。
デバイス非依存ピクセルの値を取得しているのですから当然と言えば当然ですが。

で,各Visualの物理ピクセルでの大きさを取得するのは面倒なので,ウィンドウについて幅と高さをWin32 APIを介して取得すると,
(Win32の取得値) / (WPFのデバイス非依存ピクセルでの取得値)がWindowsのスケーリング値になります。
おそらく,内部のVisualのスケーリングもこの値と同じでしょう。

それを元にすると,85x85というのは奇妙に思えます。
これが物理ピクセルの大きさだとすると,カスタムスケーリングで133%を指定しているのでしょうか。

なお,100%/125%ともにWindows 8 Professionalで,Windowsがデフォルトでこれらの値を設定する環境において実行しています。
添付ファイル
WpfApplication1.zip
Visual Studio 2010 Solution File
(10.17 KiB) ダウンロード数: 27 回

閉鎖

“C言語何でも質問掲示板” へ戻る