質問
キャンバス (特定の幅がある) の幅をピクセル単位で決定するにはどうすればよいですか?
AnimatedImage コントロールにビットマップがあり、ビットマップの幅がピクセル単位でわかっているので、キャンバスに水平方向に正確にフィットするようにビットマップを拡大縮小したいと考えています。このスケールを決定するにはどうすればよいですか?
注記:ビットマップはすでにロードされているため、RenderTargetBitmap を使用する必要はありません。
解決
WPF では、ユニットはデバイスに依存しません。ユニットの実際のピクセル サイズを計算する式は次のとおりです。
WPF ユニットあたりのピクセル = ConstantWPFUnit サイズ * モニター DPI。
ピクセル単位の要素のサイズ = WPF ユニットあたりのピクセル * MyElement.ActualWidth
一定の WPF ユニット サイズは 1/96 です。私の記憶が正しければ、モニターの DPI は、SystemInformation.GetPrimaryMonitor などから返されるクラスのプロパティとして見つかります。
FrameworkElement の ActualWidth はデバイスに依存しない単位であり、レイアウトが行われた後に要素が実際に占める幅です。このプロパティに、上で計算した WPF ユニットあたりのピクセルを掛けるだけで、答えが得られます。
ただし、手作業でコーディングをしすぎているのではないかと疑っています。画像やその他の視覚要素を任意の方法で引き伸ばすことは、通常、対象のコントロール/ブラシのプロパティを設定するだけで実現できます。ビットマップを含む要素に対して horizontalAlignment="Stretch" とverticalAlignment="Center" を作成してみましたか?