====== 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]] )