meta data for this page
Bildermix
Um mehrere Bilder zu einem Bild zusammen zufügen kann man den Befehl FF_MixImage verwenden, oder den seit FF-Version 3.02 zur Verfügung stehende Befehl FF_DrawImage.
Um FF_MixImage zu demonstrieren wird im folgenden Beispiel
- die Bildfläche des Bildes auf der Arbeitsfläche mit FF_ExtendCanvas so erweitert, dass als zweites Bild das erste markierte Bild im Computerverzeichnis rechts hinzugefügt werden kann.
- Das erweiterte Bild wird mit FF_PushImage in den Stack geschoben
- Das zweite Bild wird mit FF_LoadImage in den Arbeitsspeicher geladen und dann mit dem Bild im Stack mit FF_MixImage gemischt.
- Das Ergebnis wird vom Stack mit FF_PopImage zurückgeholt in den Arbeitsspeicher und mit 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 FF_NewImage eine genügend große Bildfläche zu erzeugen und dann die beiden (oder auch mehrere) Bilder mit** FF_MixImage dort einzufügen. Das Ergebnis enthält dann keine Bildinformationen. Diese Vorgehensweise hat zudem den Vorteil, dass auch das erste Bild mit FF_MixImage skaliert und mit Transparenz versehen werden kann.
Hierzu ein zweites Beispiel mit 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 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 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 FF_DrawImage dürfte schneller sein, erfordert aber mindestens die FF-Version 3.02.