2017-05-09 3 views
1

Mit "Zoom" -Layout-Hintergrundbild entsprechen tatsächliche Breite und Höhe nicht immer der Breite und Höhe des enthaltenen Steuerelements, im Gegensatz zum "Stretch" -Layout. Ich frage mich, ob es eine Eigenschaft oder etwas in Winforms gibt, um aktuelle gerenderte Bilddimensionen zu erhalten, ohne irgendeine Mathematik zu machen?tatsächliche Abmessungen des Hintergrundbildes mit "Zoom" -Layout

+1

Nichts, was ich kenne. Ist die Mathematik wirklich so einschüchternd? – adv12

+0

@ adv12 nein, ich liebe Mathe, in der Tat habe ich es schon getan, während ich auf die Antwort gewartet habe, aber warum erfinde ich ein Rad neu? –

Antwort

1

Dies gibt die Rectangle Pixel von einem PictureBox für eines der SizeModes zurück.

Aber ja, es braucht etwas Mathematik für den Zoom-Modus.

Es kann leicht an die entsprechenden BackgroudImageLayout Werte angepasst werden:

Rectangle ImageArea(PictureBox pbox) 
{ 
    Size si = pbox.Image.Size; 
    Size sp = pbox.ClientSize; 

    if (pbox.SizeMode == PictureBoxSizeMode.StretchImage) return pbox.ClientRectangle; 
    if (pbox.SizeMode == PictureBoxSizeMode.Normal || 
     pbox.SizeMode == PictureBoxSizeMode.AutoSize) return new Rectangle(Point.Empty, si); 
    if (pbox.SizeMode == PictureBoxSizeMode.CenterImage) 
     return new Rectangle(new Point((sp.Width - si.Width)/2, 
          (sp.Height - si.Height)/2), si); 

    // PictureBoxSizeMode.Zoom 
    float ri = si.Width/si.Height; 
    float rp = sp.Width/sp.Height; 
    if (rp > ri) 
    { 
     int width = si.Width * sp.Height/si.Height; 
     int left = (sp.Width - width)/2; 
     return new Rectangle(left, 0, width, sp.Height); 
    } 
    else 
    { 
     int height = si.Height * sp.Width/si.Width; 
     int top = (sp.Height - height)/2; 
     return new Rectangle(0, top, sp.Width, height); 
    } 
} 
+0

Kinda sieht aus wie ich es mir vorgestellt habe, aber es gibt kein einziges Wort in der Frage 'PictureBox' –

+0

True, aber das' BackgroundImageLayout' für Controls wie 'Panel' oder' Label' sind im Grunde genommen identisch mit dem 'PictureBoxSizeMode ', außer dass es keinen 'Tile'-Modus hat, aber einen' Autosize'-Modus hat. – TaW

Verwandte Themen