====== Bildermix ======
\\ Um mehrere Bilder zu einem Bild zusammen zufügen kann man den Befehl [[skriptbefehle:ff_miximage|FF_MixImage]] verwenden, oder den seit FF-Version 3.02 zur Verfügung stehende Befehl [[skriptbefehle:ff_drawimage|FF_DrawImage]].\\ \\ Um [[skriptbefehle:ff_miximage|FF_MixImage]] zu demonstrieren wird im folgenden Beispiel\\
* die Bildfläche des Bildes auf der Arbeitsfläche mit [[skriptbefehle:ff_extendcanvas|FF_ExtendCanvas]] so erweitert, dass als zweites Bild das erste markierte Bild im Computerverzeichnis rechts hinzugefügt werden kann.
* Das erweiterte Bild wird mit [[skriptbefehle:ff_pushimage|FF_PushImage]] in den Stack geschoben
* Das zweite Bild wird mit [[skriptbefehle:ff_loadimage|FF_LoadImage]] in den Arbeitsspeicher geladen und dann mit dem Bild im Stack mit [[skriptbefehle:ff_miximage|FF_MixImage]] gemischt.
* Das Ergebnis wird vom Stack mit [[skriptbefehle:ff_popimage|FF_PopImage]] zurückgeholt in den Arbeitsspeicher und mit [[skriptbefehle:ff_reload|FF_Reload]] auf die Arbeitsfläche geladen.
\\ //1) VBS-Beispiel mit FF_MixImage//\\
'Beispiel für das Zusammenfügen von zwei Bildern zu einem Bild
'Bild_1 ist das auf der Arbeitsfläche geladene Bild
'Bild_2 ist das erste markierte Bild im Computerverzeichnis
Option Explicit
if FF_GetImageCount = 0 then
msgbox "Es muss mindestens ein Bild markiert sein!",vbExclamation,"Abbruch"
else
call main
end if
'-------------------------------------------------------------------------------------
Sub main
'Bild_2 dem geladenen Bild auf der rechten Seite hinzufügen
'mit Grundfarbe rot / Rand 10 px
const FarbWert_R = 255 : const FarbWert_G = 0 : const FarbWert_B = 0 'Grundfarbe rot
const Rand = 10 'Randstärke in px
const mix = 256 'Stärke der Bildmischung (0-256), wirkt wie eine Transparenz
const Vs = 0 'Verschiebung Bild 2 zu Bild 1 in der Horizontalen (< 1)
' als Faktor zur Breite von Bild 1 (- nach links / + nach rechts)
const SF = 1 'Skalierungsfaktor für Bild 2
Dim Bild_2
Dim left,right,top,bottom,B_1,H_1,B_2,H_2
Dim xstart,ystart,width,height
if FF_GetImageWidth = 0 then
msgbox "Es muss ein Bild auf der Arbeitsfläche geladen sein!",vbExclamation,"Abbruch"
exit sub
end if
if abs(VS) > 1 then
msgbox "Der Absolutwert der Verschiebung muss kleiner 1 sein!",vbExclamation,"Abbruch"
exit sub
end if
Bild_2 = FF_GetImageName(0) 'erstes markiertes Bild in der Computeransicht
B_1 = FF_GetImageWidth
H_1 = FF_GetImageHeight
B_2 = FF_GetImageFileWidth(Bild_2) * SF
H_2 = FF_GetImageFileHeight(Bild_2) * SF
'Bild 1 auf der Arbeitsfläche erweitern und in den Stack schieben
left = Rand
right = B_2 + B_1 * VS + 2 * Rand
if H_2 > H_1 then
top = (H_2 - H_1) / 2 + Rand
else
top = Rand
end if
bottom = top
FF_ExtendCanvas left,right,top,bottom,FarbWert_R,FarbWert_G,FarbWert_B
FF_PushImage
'Bild 2 laden und einfügen in Bild 1
xstart = B_1 + B_1 * VS + 2 * Rand
if H_1 > H_2 then
ystart = (H_1 - H_2) / 2 + Rand
else
ystart = Rand
end if
width = B_2
height = H_2
FF_LoadImage(Bild_2)
FF_MixImage xstart,ystart,width,height,mix
'Stackinhalt nach oben holen und auf Arbeitsfläche laden
FF_PopImage
FF_Reload
End Sub
'-------------------------------------------------------------------------------------
* Das zweite Bild liegt über dem ersten. Um das zu demonstrieren, kann man das zweite Bild etwas nach links verlagern indem man die Verschiebungskonstante Vs von 0 z.B. auf -0.25 abändert. Damit wird Bild 2 um 25% der Bildbreite von Bild 1 verschoben.
* Das zweite Bild kann beim Mischen skaliert werden. Das ist zu sehen, wenn man den Skalierungsfaktor SF von 1 auf z.B. 0.5 setzt.
* Das zweite Bild kann transparent dargestellt werden. Dazu muss die Stärke der Bildmischung mix von 256 z.B. auf 128 geändert werden.
\\ Die fertige Bildkombination enthält die Exif- und IPTC-Daten des ersten Bildes. Man muss sich entscheiden, wie man damit umgeht oder sie löschen. \\ \\ Eine andere Möglichkeit ist, als Grundlage für die Bildkombination nicht ein Bild mit Erweiterung der Bildfläche zu verwenden, sondern mit [[skriptbefehle:ff_newimage|FF_NewImage]] eine genügend große Bildfläche zu erzeugen und dann die beiden (oder auch mehrere) Bilder mit** [[skriptbefehle:ff_miximage|FF_MixImage]] dort einzufügen. Das Ergebnis enthält dann keine Bildinformationen. Diese Vorgehensweise hat zudem den Vorteil, dass auch das erste Bild mit [[skriptbefehle:ff_miximage|FF_MixImage]] skaliert und mit Transparenz versehen werden kann.\\ Hierzu ein zweites Beispiel mit [[skriptbefehle:ff_miximage|FF_MixImage]], bei dem die ersten beiden markierten Bilder im Computerverzeichnis in ein neues Bild eingefügt und dabei die Höhen der beiden Bilder auf die geringere Höhe angepasst werden.\\ \\ //2) VBS-Beispiel mit FF_MixImage//\\
'Beispiel für das Zusammenfügen von zwei Bildern zu einem Bild
'Bild_1 und Bild_2 sind die markierten Bild im Computerverzeichnis
'Die Höhen werden angepasst auf die geringere Höhe beider Bilder
Option Explicit
if FF_GetImageCount < 2 then
msgbox "Es müssen mindestens zwei Bilder markiert sein!",vbExclamation,"Abbruch"
else
call main
end if
'-------------------------------------------------------------------------------------
Sub main
'Bild_1 und Bild_2 in neues Bild einfügen
'mit Grundfarbe rot / Rand 10 px
'Die Bilderhöhen werden der Höhe des niedrigeren Bildes angepasst
const FarbWert_rgb = 255
const Rand = 10 'Randstärke in px
const mix = 256 'Stärke der Bildmischung (0-256), wirkt wie eine Transparenz
Dim Bild_1,Bild_2
Dim B_1,H_1,B_2,H_2,H
Dim xstart,ystart,width,height
Bild_1 = FF_GetImageName(0) 'erstes markiertes Bild in der Computeransicht
Bild_2 = FF_GetImageName(1) 'zweites markiertes Bild in der Computeransicht
B_1 = FF_GetImageFileWidth(Bild_1)
H_1 = FF_GetImageFileHeight(Bild_1)
B_2 = FF_GetImageFileWidth(Bild_2)
H_2 = FF_GetImageFileHeight(Bild_2)
'Neues Bild erzeugen und in den Stack schieben
if H_1 < H_2 then H = H_1 else H = H_2
B_1 = B_1 * H / H_1
B_2 = B_2 * H / H_2
FF_NewImage B_1 + B_2 + 3 * Rand,H + 2 * Rand,FarbWert_rgb
FF_PushImage
'Bild 1 laden und einfügen
xstart = Rand
ystart = Rand
width = B_1
height = H
FF_LoadImage(Bild_1)
FF_MixImage xstart,ystart,width,height,mix
'Bild 2 laden und einfügen
xstart = B_1 + 2 * Rand
ystart = Rand
width = B_2
height = H
FF_LoadImage(Bild_2)
FF_MixImage xstart,ystart,width,height,mix
'Stackinhalt nach oben holen und auf Arbeitsfläche laden
FF_PopImage
FF_Reload
End Sub
'-------------------------------------------------------------------------------------
Auf die Verschiebungskonstante Vs und den Skalierungsfaktor SF wurde bei diesem Beispiel verzichtet.
Wenn man den Befehl [[skriptbefehle:ff_drawimage|FF_DrawImage]] verwendet, kann man auf das Verschieben des Grundbildes in den Stack verzichten und auch das Laden der Bilder im 2. Beispiel entfällt. Die Möglichkeit mit Transparenz zu arbeiten entfällt allerdings, dürfte aber er in der Regel auch nicht verwendet werden.
Hier das 2. Beispiel nochmal realisiert mit [[skriptbefehle:ff_drawimage|FF_DrawImage]].
3) VBS-Beispiel mit FF_DrawImage\\
'Beispiel für das Zusammenfügen von zwei Bildern zu einem Bild
'Bild_1 und Bild_2 sind die markierten Bild im Computerverzeichnis
'Die Höhen werden angepasst auf die geringere Höhe beider Bilder
Option Explicit
if FF_GetImageCount < 2 then
msgbox "Es müssen mindestens zwei Bilder markiert sein!",vbExclamation,"Abbruch"
else
call main
end if
'-------------------------------------------------------------------------------------
Sub main
'Bild_1 und Bild_2 in neues Bild einfügen
'mit Grundfarbe rot / Rand 10 px
'Die Bilderhöhen werden der Höhe des niedrigeren Bildes angepasst
const FarbWert_rgb = 255
const Rand = 10 'Randstärke in px
'const mix = 256 'Transparenz - mit FF_DrawImage nicht verwendbar
Dim Bild_1,Bild_2
Dim B_1,H_1,B_2,H_2,H
Dim xstart,ystart,width,height
Bild_1 = FF_GetImageName(0) 'erstes markiertes Bild in der Computeransicht
Bild_2 = FF_GetImageName(1) 'zweites markiertes Bild in der Computeransicht
B_1 = FF_GetImageFileWidth(Bild_1)
H_1 = FF_GetImageFileHeight(Bild_1)
B_2 = FF_GetImageFileWidth(Bild_2)
H_2 = FF_GetImageFileHeight(Bild_2)
'Neues Bild erzeugen und in den Stack schieben
if H_1 < H_2 then H = H_1 else H = H_2
B_1 = B_1 * H / H_1
B_2 = B_2 * H / H_2
FF_NewImage B_1 + B_2 + 3 * Rand,H + 2 * Rand,FarbWert_rgb
'FF_PushImage - entfällt hier
'Bild 1 laden und einfügen
xstart = Rand
ystart = Rand
width = B_1
height = H
'FF_LoadImage(Bild_1) - entfällt hier
'FF_MixImage xstart,ystart,width,height,mix - wird ersetzt durch nächsten Befehl
FF_DrawImage Bild_1,xstart,ystart,width,height
'Bild 2 laden und einfügen
xstart = B_1 + 2 * Rand
ystart = Rand
width = B_2
height = H
'FF_LoadImage(Bild_2) - entfällt hier
'FF_MixImage xstart,ystart,width,height,mix - wird ersetzt durch nächsten Befehl
FF_DrawImage Bild_2,xstart,ystart,width,height
'Stackinhalt nach oben holen und auf Arbeitsfläche laden
'FF_PopImage - entfällt hier
FF_Reload
End Sub
'-------------------------------------------------------------------------------------
Die Anwendung von [[skriptbefehle:ff_drawimage|FF_DrawImage]] dürfte schneller sein, erfordert aber mindestens die FF-Version 3.02.