Je dessine une image à partir de MetaFile (emf), puis j'applique des transformations de rotation à tout cela dans OnPaint d'un UserControl. Après avoir appliqué ces transformations, comment puis-je calculer la boîte rectangulaire normale non transformée de cette coordonnée à l'écran? J'ai besoin de cela pour pouvoir redimensionner l'image pivotée à la taille de UserControl.Calcul de la boîte englobante d'un dessin GDI +
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);
}
L'idée derrière cela est que je veux afficher une rotation .emf fichier dans un UserControl et ont le dessin fem remplir AllWays l'espace disponible dans le UserControl. Peut-être qu'il y a une meilleure approche?
Le mode fillmode/stretchmode que je cherche après est Uniform et UniformToFill (comme dans la Viewbox de WPF). La fem ne doit pas être déformée et en mode Uniforme l'emf remplit complètement la commande usercontrol au moins dans une dimension, rien n'est recadré. Dans UniformToFill, l'emf enchante le UserControl dans les deux dimensions et si les aspectratios ne correspondent pas, l'emf est recadrée dans une dimension.
Comment voulez-vous qu'il se "remplisse"? Est-ce que la force électromotrice devrait couvrir complètement l'usercontrol (une partie de la force électromotrice devrait-elle être coupée) ou devrait-elle être dimensionnée de façon à ce que toute la force électromotrice soit visible - en laissant les parties de l'usercontrol couvertes? Et l'emf devrait-elle garder son format d'origine ou non? –
Le mode de remplissage/stretchmode que je suis après est Uniform et UniformToFill (comme dans la Viewbox de WPF). La fem ne doit pas être déformée et en mode Uniforme l'emf remplit complètement la commande usercontrol au moins dans une dimension, rien n'est recadré. Dans UniformToFill, l'emf enchante le UserControl dans les deux dimensions et si les aspectratios ne correspondent pas, l'emf est recadrée dans une dimension. – bitbonk