Я рисую изображение из MetaFile (emf), а затем применяю ко всему этому некоторые преобразования вращения в 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. Может быть, есть лучший подход?
Режим заполнения/растягивания, который мне нужен, — это Uniform и UniformToFill (как в окне просмотра WPF). ЭДС не должна искажаться, а в режиме Uniform ЭДС полностью заполняет пользовательский элемент управления по крайней мере в одном измерении, ничего не обрезается. В UniformToFill ЭДС заполняет UserControl в обоих измерениях, и если пропорции не совпадают, ЭДС обрезается в одном измерении.