Ich weiß, daß Pozentrechnung, Verhältnisrechnung und Dreisatz (alles dasselbe) das schwierigste im Leben ist - aber auch das einzige aus der Schul-Mathe, was man im Leben wirklich braucht
Um eine Grafik (hier BMP) mit canvas
proportional auf einem Endgerät (Bildschirm, Drucker ...) auszugeben, müssen die Zielabmessungen BxH
auch dieselben Proportionen wie die der Quelle (deine BMP) haben.
Du hast als Quell-Abmessungen bmp.Width und bmp.Height.
Die Zielabmessungen sind ...StretchDraw(Bounds(Einfx,Einfy,
Zielbreite,Zielhöhe)...
Die Bedingung für proportionale Ausgabe ist:
bmp.Width / bmp.Height = Zielbreite / Zielhöhe
in den jeweiligen Einheiten (s.a. Angehängte Abb.).
1)
Normalerweise gibt man
eine Ziel-Abmessung vor, z.B. die Breite. Dann muss die Höhe aus den Proportionen errechnet werden:
Aus bmp.Width / bmp.Height = Zielbreite / Zielhöhe folgt
Zielhöhe = Zielbreite * bmp.Height / bmp.Width
also Printer.Canvas.StretchDraw(Bounds(Einfx,Einfy,Ziel höhe,Zielbreite * bmp.Height div bmp.Width), bmp);
oder Printer.Canvas.StretchDraw(Bounds(2000,2000,2000,2 000 * bmp.Height div bmp.Width), bmp);
(Bei Höhe als Vorgabe umgekehrt).
2)
... kann man auch einen Vergrößerungs/Verkleinerungsfaktor vorgeben, dann ist
Zielbreite = bmp.Width * Faktor
Zielhöhe = bmp.Height * Faktor
3)
... oder 1:1 Ausgabe
Zielbreite = bmp.Width
Zielhöhe = bmp.Height
Nur: beide Werte des Zieles willkürlich vorgeben stretcht das Bild eben in diese Vorgaben und es wird verzerrt/gestretcht. Deshalb heißt die Procedure auch
StretchDraw, weil sie das Bild eben gnadenlos an die Vorgabewerte anpaßt (s.a. Angehängte Abb.).
Anm: Bezeichnungen wie "Zielhöhe" etc. müssen logo in Syntaxgerechte Bezeichner umgesetzt werden