Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: skalierung ermitteln TBitmap.Wrapmode = Fit

  Alt 20. Feb 2015, 19:13
Okay, dann anders:
Ich nehme mal an, dass "Fit" heisst, dass das Bild unter Beibehaltung des Seitenverhältnisses skaliert, und nicht wirklich mit Gewalt das Bitmap auf die ganze Anzeige staucht. In dem Fall musst du zunächst das Bildverhältnis des TImage ermitteln: Vi = Image.Breite / Image.Höhe
Das gleiche für das Original-Bitmap: Vb = Bitmap.Breite / Bitmap.Höhe

Wenn Vi > Vb, dann wird das Bitmap in Y-Richtung nachher genau so hoch sein wie das Image. Wenn Vb > Vi, dann wird das Bitmap nachher genau so breit sein wie das Image. Dein Skalierungsfaktor ist dann je nach Fall entweder (Image.Breite / Bitmap.Breite) oder (Image.Höhe / Bitmap.Höhe).

Wenn "Fit" wirklich auf das gesamte Image staucht, brauchst du beide Faktoren und musst die X und Y Koordinaten mit ihren jeweils eigenen Faktoren umrechnen.

Bleibt noch die Frage, ob das Bitmap in der Richtung, in der etwas "über" ist zentriert wird oder nicht. Wenn nicht, ist nichts weiter zu tun. Wenn doch, dann musst du noch folgendes ermitteln:
Von der Achse, die nachher nicht vollständig auf das Image gezogen wird: Offset = (Image.Achse - (Bitmap.Achse * Skalierungsfaktor)) / 2
Dieses Offset musst du dann nacher von den noch nicht umgerechneten Mauskoordinaten (nur auf die entsprechende Achse natürlich) subtrahieren, um den entstandenen Rand zwischen Bitmap und Image zu berücksichtigen.

Alles nur Realschulmathe, keine Bildvergleiche oder sowas für so etwas einfaches! Das wäre mit einem B-52 auf einen Sperling geschossen.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat