meta data for this page
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

bildermix [2011/03/15 15:38] (aktuell)
Zeile 1: Zeile 1:
 +====== Bildermix ======
 +\\  Um mehrere Bilder zu einem Bild zusammen zufügen kann man den Befehl **[[/​FF_MixImage|FF_MixImage]]** verwenden, oder den seit FF-Version 3.02 zur Verfügung stehende Befehl [[/​FF_DrawImage|**FF_DrawImage**]].\\ \\  Um **[[/​FF_MixImage|FF_MixImage]]** zu demonstrieren wird im folgenden Beispiel\\ ​
  
 +  * die Bildfläche des Bildes auf der Arbeitsfläche mit **[[/​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 **[[/​FF_PushImage|FF_PushImage]]** in den Stack geschoben
 +  * Das zweite Bild wird mit **[[/​FF_LoadImage|FF_LoadImage]]** in den Arbeitsspeicher geladen und dann mit dem Bild im Stack mit **[[/​FF_MixImage|FF_MixImage]]** gemischt.
 +  * Das Ergebnis wird vom Stack mit **[[/​FF_PopImage|FF_PopImage]]** zurückgeholt in den Arbeitsspeicher und mit **[[/​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 **[[/​FF_NewImage|FF_NewImage]] eine genügend große Bildfläche zu erzeugen und dann die beiden (oder auch mehrere) Bilder mit** **[[/​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 **[[/​FF_MixImage|FF_MixImage]]** skaliert und mit Transparenz versehen werden kann.\\ Hierzu ein zweites Beispiel mit **[[/​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 [[/​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 [[/​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 **[[/​FF_DrawImage|FF_DrawImage]]** dürfte schneller sein, erfordert aber mindestens die FF-Version 3.02.