Seitenverhältnis berechnen


Aus Länge und Breite eines Bildes in Pixeln kann das Seitenverhältnis ermittelt werden
Msgbox SeitenV (780, 660)
 
Function SeitenV (breite, hoehe)
     ' Berechnet das ganzzahlige Verhältnis aus zwei Werten
     ' Ausgabe als String "A : B" bzw. gibt an DIN-Format oder Goldener Schnitt

     Dim SV, n, E
     const T = .01             ' Toleranz

     breite = int(breite)      ' ganzzahliger Anteil
     hoehe = int(hoehe)        ' ganzzahliger Anteil

     SV = breite / hoehe
 
     'DIN-Format ?
     if abs(SV - 2^.5) < T or abs(SV - 1/2^.5) < T then
          SeitenV = "DIN-Format"
          exit function
     end if
 
     'Goldener Schnitt ?
     if abs(SV - 1.618) < T or abs(SV - 1/1.618) < T then
          SeitenV = "Goldener Schnitt"
          exit function
     end if
 
     ' Schleife bis Ergebnis geradzahlig
     n = 0
     do
          n = n + 1
          E = n * SV
          if abs(E - round(E)) < T then exit do
          if n > 1000 then exit do
     loop
     E = round(E)
     If n > 1000 then
          Msgbox "Es kann kein Ergebnis ermittelt werden.", vbExclamation, "Hinweis"
     Exit Function
     End If
 
     SeitenV = E & " : " & n
End Function