MetaFile(emf)から画像を描画し、UserControlのOnPaint内ですべてに回転変換を適用しています。これらの変換を適用した後、画面座標でこれの通常の変換されていない長方形のバウンディングボックスを計算するにはどうすればよいですか?回転した画像のサイズをUserControlのサイズに変更できるようにするには、これが必要です。
protected override void OnPaint(PaintEventArgs e)
{
// rotate around the center of this UserControl
e.Graphics.TranslateTransform(this.Width / 2.0f, this.Height / 2.0f);
e.Graphics.RotateTransform(this.Rotation);
e.Graphics.TranslateTransform(this.Width / -2.0f, this.Height / -2.0f);
// TODO: now scale so the image so it fits exactly into this UserControl
// draw the image at the center of this UserControl
float left = (this.Width - ResourceManager.MyDrawingMetaFile.Width) / 2.0f;
float top = (this.Height - ResourceManager.MyDrawingMetaFile.Height) / 2.0f;
e.Graphics.DrawImage(Resources.MyDrawingMetaFile, left, top);
}
この背後にある全体的な考え方は、回転した.emfファイルをUserControlに表示し、emf図面がUserControlの使用可能なスペースを常に埋めるようにすることです。たぶんもっと良いアプローチがありますか?
私が求めているfillmode/Stretchmodeは、UniformとUniformToFillです(WPFのビューボックスのように)。均一モードでは、emfが歪んではいけません。emfは少なくとも1つの次元でユーザーコントロールを完全に満たし、何もトリミングされません。UniformToFillでは、emfは両方の次元でUserControlを満たし、アスペクト比が一致しない場合、emfは1つの次元でトリミングされます。