4

過去に、WPF ピクセル座標をデスクトップ座標に変換することに関する同様の質問に対するこの回答にリンクされていましたが、関連する数学を理解しているかどうかはわかりません。

驚くべき答えは、「WPF ユニットあたりのピクセル数 = ConstantWPFUnit サイズ * モニター DPI;」と述べています。そして、「一定のWPFユニットサイズは1/96です」。

私の場合、デスクトップのスクリーンショットを撮った後に作成したビットマップオブジェクトから作成されたグラフィックオブジェクトから DPI を取得しました (Astonish が話したプロパティが見つからなかったため)。

Graphics g = Graphics.FromImage(bitmap);
float WpfUnit = (1 / 96) * g.DpiX;

グラフィックス オブジェクトから返される DPI が 96 であることを考えると、

WpfUnit = (1 / 96) * 96 = 1

ただし、WpfUnit は、(私にとって) 不明な理由で 0 として出力されます。これを修正するために私が見ることができる唯一の方法は、言うことです

if(WpfUnit == 0) WpfUnit = 1;

リンクされた回答で提案されているように、高さの値と上部の値にWpfUnitを掛けると、1を掛ける以外に何も行われないため、それでも問題は実際には解決されません。

結論として、私はまだ WPF ピクセルをデスクトップ ピクセルに変換することに固執しています。これに関するヘルプは大歓迎です。

4

2 に答える 2

6

WpfUnit は 1/96 で整数演算を行っているため、ゼロとして出力されます。これらの数値を float として明示的に宣言します。

于 2009-07-27T17:07:00.070 に答える
2

組み込みのPointToScreenメソッドとPointFromScreenメソッドはどうですか?それとも私は何かが足りないのですか?

于 2009-07-27T17:29:54.690 に答える