2016-12-16 5 views
2

Ich habe eine PictureBox, die mehrere verschiedene Größen haben kann (abhängig von Bildschirmauflösung, Fensterstatus usw.). Was ich möchte, ist meine image an die PictureBox passen, wenn eine der image Abmessungen (Breite oder Höhe) unter die entsprechende Dimension der PictureBox geht. Bild an PictureBox anpassen, wenn PictureBox kleiner ist als Bild

Beispiel: Wenn die Breite des image größer ist als die des PictureBox, aber die Höhe des image geringer ist als die des PictureBox, wird es die image Breite vergrößert werden, bis es, dass der gleich dem PictureBox unter Beibehaltung des ursprünglichen Seitenverhältnisses und zentrieren Sie die image vertikal.

Wenn die PictureBox größer ist als beide image Dimensionen, dann wird das Bild einfach zentriert. Dieser Teil habe ich mit PictureBoxSizeMode.AutoSize und etwas Code gemacht, um die image basierend auf den Größen image und PictureBox zu zentrieren.

picbx.ImageLocation = "Image path here"; 
picbx.SizeMode = PictureBoxSizeMode.AutoSize; 
picbx.Anchor = AnchorStyles.None; 
picbx.Location = new Point((picbx.Parent.ClientSize.Width/2) - (picImage.Width/2), 
          (picbx.Parent.ClientSize.Height/2) - (picImage.Height/2)); 
picbx.Refresh(); 

Eine Sache, die ich nicht berücksichtigen muss, ist die Größenänderung im Moment. Das Fenster lässt keine Größenanpassung zu und es muss keine andere Situation außer der anfänglichen Belastung berücksichtigt werden.

Ich habe viele Beiträge gefunden, die in der Nähe zu schlagen scheinen, aber nichts, das vollständig funktioniert. Stretch führt zu einer Verzerrung image, Auto-Size- nicht resize auf Behältergröße basiert, und Zoom kann gut funktionieren, wenn die image größer ist als die PictureBox aber ich habe noch einen Weg zu entdecken Zoom zu verhindern, dass die image Erhöhung Größe passend für die PictureBox.

Weil ich es zu einem picbx.ImageLocation habe die Einrichtung und nicht die picbx.Image-Eigenschaft, habe ich noch einen Weg, um herauszufinden, die image Innenseite der PictureBox auf der Dimension (Breite oder Höhe) basiert, um die Größe, die sein muss die Referenz für die Größenänderung.

Antwort

4

Wenn Sie die PictureBox und Image Größen kennen, können Sie einfach legen Sie die entsprechenden SizeMode-Zoom wenn Breite oder Höhe des Bildes größer als das Feld Bild, CenterImage sonst:

var imageSize = picbx.Image.Size; 
var fitSize = picbx.ClientSize; 
picbx.SizeMode = imageSize.Width > fitSize.Width || imageSize.Height > fitSize.Height ? 
    PictureBoxSizeMode.Zoom : PictureBoxSizeMode.CenterImage; 
+0

Genau das, was ich brauchte. Ich brauchte nur die richtige Kombination. Vielen Dank! – Hank

+0

Gibt es eine Möglichkeit, den Zoom so einzustellen, dass er auf eine bestimmte Dimension und nicht auf den Standard passt? Wie wenn ich den Schalter wechseln wollte, zoomt er auf die Breite statt auf die Höhe, um eine Art Zoom zu imitieren? – Hank

+0

Ich glaube nicht. Es passt sich beiden Dimensionen an und behält dabei die ursprünglichen Bildproportionen bei, die sinnvoll sind. Was meinst du mit einer bestimmten Dimension? Fit eins und schneiden Sie das andere? –