Bild proportional skalieren

meste

Erfahrenes Mitglied
Hallo!

Ich mal fragen ob jemand weis wie man ein Bild verkleinern kann in dem die Propoertionen beibehällt. So, das wenn der Benutzer die Child-Form vergrößert, das die Sieten verhälltnisse vom Bild beibehalten werden. Wenn die MDI Child-Form bsp. auf 700x200 skaliert wird, soll das Bild einer größe von ca. 266x200 haben. Der rest auf den Seiten soll halt die Hintergrundfarbe von der Form haben.

ich hoffe ich konnte es halbweg erklären und wäre sehr dankbar für eure hilfe.


m.e.s.t.e
 

CSANecromancer

Erfahrenes Mitglied
Also wenn du die reine Mathematik meinst, dann habe ich hier ein Code Snippet. Ist zwar nicht C# sondern Delphi .net, aber das Prinzip sollte daraus durchaus ersichtlich werden. Die Kommentare habe ich zum besseren Verständnis hier eingefügt, um nicht den gesamten precedure-Header posten zu müssen:

Code:
// l_Percent: Double mit dem Skalierungsfaktor (z.B. 0.5)
// p_Percent: Integer mit Prozentsatz des Skalierungsfaktors (z.B. 50)
// l_Image: Lokales Bitmapobjekt
// Image.Picture.Bitmap: Bitmapobjekt, das im Formular abgelegt ist und das Bild anzeigt.
// l_Rect: Lokale TRect-Struktur

l_Percent := p_Percent / 100;   
l_Image := TBitmap.Create;
l_Image.Height := Round(Image.Picture.Bitmap.Height * l_Percent);
l_Image.Width := Round( l_Image.Height * Round(Image.Picture.Bitmap.Width / Image.Picture.Bitmap.Height));
l_Rect.Top := 0;
l_Rect.Left := 0;
l_Rect.Right := l_Image.Width - 1;
l_Rect.Bottom := l_Image.Height -1;
l_Image.Canvas.StretchDraw(l_Rect, Image.Picture.Bitmap);

// Danach bitte nicht vergessen, die Bilddaten von l_Image nach Image.Picture.Bitmap zu
// transferieren und l_Image wieder freizugeben.
 

Nico Graichen

Erfahrenes Mitglied
Hi

Ich würde vorschlagen, du legst das Bild in eine PictureBox, bei der du die Anchor entsprechend setzt. Den SizeMode setzt du auf StretchImage. Beim Verändern der Größe des Parents ändert sich auch die Größe der PictureBox und somit auch die das Images
 

Norbert Eder

Erfahrenes Mitglied
Anchor ist eine schlechte Variante, da hierbei die Proportion nicht erhalten bleibt. Einfach die Größenänderung der Form merken (Events: Resize, ResizeBegin, ResizeEnd) und danach aufgrund der getätigten Änderung, deine PictureBox (Image sollte im Mode StretchImage drinnen liegen) in der Größe anpassen.