====== Dialog Ausschneiden (VBS) ======
Der Dialog gehört zu den [[skriptbefehle:ff_multidialog|Multidialogen]]. Er wird aufgerufen mit:
FF_MultiDialog "MultiCanvas",2
Um eine Information über den Ablauf zu erhalten, beispielsweise ob der Dialog abgebrochen wurde, kann der Dialog auch wie folgt aufgerufen werden:
Dim Antwort
Antwort = FF_MultiDialog ("MultiCanvas",2)
if Antwort < 0 then
msgbox "Das Bild wurde nicht beschnitten!",vbInformation,"Hinweis"
end if
Die genauen Rückgabewerte sind:
-1 = nichtspezifizierter Fehler
-2 = Abbruch
Will man Schnittmarken vorgeben, ist das und weiteres mit **FF_SetParam** möglich:
Dim Antwort,Array
Dim SchnittabstandX,SchnittabstandY
Dim Schnittbreite,Schnitthoehe
Dim Bildbreite,Bildhoehe
Dim Markierung,Proportional
'Beispielswerte
Schnittbreite = 800
Schnitthoehe = 600
Bildbreite = FF_GetImageWidth
Bildhoehe = FF_GetImageHeight
Markierung = 0 'Erläuterung siehe unten '### Markierungsauswahl
Proportional = 1 '0 bedeutet 'nicht proportional'
'### Markierungsauswahl (bis Version 3.02.24 - nur zur Erläuterung):
'0 - Markierung "Aus", Beschnitt nicht proportional (hier nicht zulässig)
'1 - Markierung "Goldener Schnitt", Beschnitt proportional
'2 - Markierung "Drittel", Beschnitt proportional
'3 - Markierung "Deutschland ab 10", Beschnitt proportional
'4 - Markierung "Deutschland bis 9", Beschnitt proportional
'5 - Markierung "Aus", Beschnitt proportional
'### Markierungsauswahl (ab Version 3.02.25 - nur zur Erläuterung):
'0 - Markierung "Aus"
'1 - Markierung "Goldener Schnitt"
'2 - Markierung "Goldene Spirale l. ob."
'3 - Markierung "Goldene Spirale r. ob."
'4 - Markierung "Goldene Spirale r. un."
'5 - Markierung "Goldene Spirale l. un."
'6 - Markierung "Drittel"
'7 - Markierung "Deutschland ab 10"
'8 - Markierung "Deutschland bis 9"
'Berechnung der Schnittabstände, wenn die Markierung mittig sein soll
SchnittabstandX = int((Bildbreite - Schnittbreite) / 2) '| erst ab Version 3.10.23 kann der Schnittabstand als x- und y-Wert vorgegeben werden
SchnittabstandY = int((Bildhoehe - Schnitthoehe) / 2) '| bis dahin werden die Schnittmarkierungen immer mittig angeordnet
'Beschnitt
FF_SetParam SchnittabstandX & "," & SchnittabstandY & "," & Schnittbreite & "," & _
Schnitthoehe & "," & Bildbreite & "," & Bildhoehe & "," & Markierung & "," & Proportional
Antwort = FF_MultiDialog ("MultiCanvas",2)
if Antwort < 0 then
msgbox "Das Bild wurde nicht beschnitten!",vbInformation,"Hinweis"
else
msgbox "Das Bild wurde erfolgreich beschnitten!",vbInformation,"Hinweis"
FF_Reload
end if
'Ermittlung der benutzten Markierung
Array = split(FF_GetParam,",")
Markierung = Array(6)
msgbox "Der benutzte Markierungscode ist " & Markierung,vbInformation,"Hinweis"
Nach Durchführung des Beschnitts kann man mit **FF_GetParam** die benutzten Einstellungen des Dialogs ermitteln, z.B. welche Markierung verwendet wurde (siehe Ende des Beispielcodes).
Ein Problem mit dem **Dialog Ausschneiden** gibt es, wenn ein querformatiger Beschnitt bei einem hochformatigen Bild oder ein hochformatiger Beschnitt bei einem querformatigen Bild erfolgen soll. Schnittbreite und Schnitthöhe müssen dann vertauscht werden und der Benutzer muss darauf hingewiesen werden, dass er im Dialog die Taste "Hoch/Quer" betätigen muss.
Der Tausch und der Hinweis kann durch folgenden Code erzeugt werden, der __vor dem Absatz__
'Beschnitt
eingefügt werden muss:
'wenn Hochformat aus Querformat oder Querformat aus Hochformat geschnitten werden soll
if (Schnittbreite > Schnitthoehe) Xor (Bildbreite > Bildhoehe) then
'Tausch
Dim B_temp
B_temp = Schnittbreite
Schnittbreite = Schnitthoehe
Schnitthoehe = B_temp
'Hinweis
msgbox "Bitte im folgenden Dialog die Taste 'Hoch/Quer' betätigen!",vbInformation,"Unbedingt beachten!"
end if
Dieses Problem ist lt. JKS historisch auf eine Forderung der Forumsmitglieder zurück zu führen (siehe [[https://www.ffsf.de/threads/problem-mit-dem-dialog-ausschneiden.13922/#post-164551|Antwort von JKS]]).
Bis zu einer Lösung kann der Trick angewendet werden die Bildfläche bei Bedarf so zu vergrößern, dass das Bildformat dem Schnittformat entspricht. Dafür wird das Bild zur Erzeugung eines Hochformats nach unten oder zur Erzeugung eines Querformats nach rechts erweitert. Der Code sieht dann so aus:
Dim Antwort,Array
Dim SchnittabstandX,SchnittabstandY
Dim Schnittbreite,Schnitthoehe
Dim Bildbreite,Bildhoehe
Dim Markierung,Proportional
'Beispielswerte
Schnittbreite = 800
Schnitthoehe = 600
Bildbreite = FF_GetImageWidth
Bildhoehe = FF_GetImageHeight
Markierung = 0 'Erläuterung siehe oben '### Markierungsauswahl
Proportional = 1 '0 bedeutet 'nicht proportional'
'Berechnung der Schnittabstände, wenn die Markierung mittig sein soll
SchnittabstandX = int((Bildbreite - Schnittbreite) / 2) '| erst ab Version 3.10.23 kann der Schnittabstand als x- und y-Wert vorgegeben werden
SchnittabstandY = int((Bildhoehe - Schnitthoehe) / 2) '| bis dahin werden die Schnittmarkierungen immer mittig angeordnet
'wenn Hochformat aus Querformat oder Querformat aus Hochformat geschnitten werden soll,
'wird das Bild um eine rote Fläche so erweitert, dass das Bildformat dem Schnittformat entspricht.
if (Schnittbreite > Schnitthoehe) Xor (Bildbreite > Bildhoehe) then
msgbox "Im folgenden Dialog die rote Erweiterungsfläche nicht in den Schnitt einbeziehen!",vbExclamation,"Hinweis"
if (Schnittbreite > Schnitthoehe) then
FF_ExtendCanvas 0,Bildhoehe-Bildbreite+1,0,0,255,0,0
Bildbreite = Bildhoehe+1
else
FF_ExtendCanvas 0,0,0,Bildbreite-Bildhoehe+1,255,0,0
Bildhoehe = Bildbreite+1
end if
end if
'Beschnitt
FF_SetParam SchnittabstandX & "," & SchnittabstandY & "," & Schnittbreite & "," & _
Schnitthoehe & "," & Bildbreite & "," & Bildhoehe & "," & Markierung & "," & Proportional
Antwort = FF_MultiDialog ("MultiCanvas",2)
if Antwort < 0 then
msgbox "Das Bild wurde nicht beschnitten!",vbInformation,"Hinweis"
else
msgbox "Das Bild wurde erfolgreich beschnitten!",vbInformation,"Hinweis"
FF_Reload
end if
'Benutzte Markierung nach dem Beschneiden ermitteln:
Array = split(FF_GetParam,",")
Markierung = Array(6)
msgbox "Der benutzte Markierungscode ist " & Markierung,vbInformation,"Hinweis"
Leider gibt es noch ein Problem mit quadratischen Ausschnitten (siehe dazu diese [[https://www.ffsf.de/threads/fehler-bei-ff_multidialog-multicanvas-2.15012/|Fehlermeldung]] )