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

  1. 'Beispiel für das Zusammenfügen von zwei Bildern zu einem Bild
  2. 'Bild_1 ist das auf der Arbeitsfläche geladene Bild
  3. 'Bild_2 ist das erste markierte Bild im Computerverzeichnis
  4.  
  5. Option Explicit
  6.  
  7. if FF_GetImageCount = 0 then
  8. msgbox "Es muss mindestens ein Bild markiert sein!",vbExclamation,"Abbruch"
  9. else
  10. call main
  11. end if
  12.  
  13. '-------------------------------------------------------------------------------------
  14. Sub main
  15. 'Bild_2 dem geladenen Bild auf der rechten Seite hinzufügen
  16. 'mit Grundfarbe rot / Rand 10 px
  17.  
  18. const FarbWert_R = 255 : const FarbWert_G = 0 : const FarbWert_B = 0 'Grundfarbe rot
  19. const Rand = 10 'Randstärke in px
  20. const mix = 256 'Stärke der Bildmischung (0-256), wirkt wie eine Transparenz
  21. const Vs = 0 'Verschiebung Bild 2 zu Bild 1 in der Horizontalen (< 1)
  22. ' als Faktor zur Breite von Bild 1 (- nach links / + nach rechts)
  23. const SF = 1 'Skalierungsfaktor für Bild 2
  24.  
  25. Dim Bild_2
  26. Dim left,right,top,bottom,B_1,H_1,B_2,H_2
  27. Dim xstart,ystart,width,height
  28.  
  29. if FF_GetImageWidth = 0 then
  30. msgbox "Es muss ein Bild auf der Arbeitsfläche geladen sein!",vbExclamation,"Abbruch"
  31. exit sub
  32. end if
  33.  
  34. if abs(VS) > 1 then
  35. msgbox "Der Absolutwert der Verschiebung muss kleiner 1 sein!",vbExclamation,"Abbruch"
  36. exit sub
  37. end if
  38.  
  39. Bild_2 = FF_GetImageName(0) 'erstes markiertes Bild in der Computeransicht
  40.  
  41. B_1 = FF_GetImageWidth
  42. H_1 = FF_GetImageHeight
  43. B_2 = FF_GetImageFileWidth(Bild_2) * SF
  44. H_2 = FF_GetImageFileHeight(Bild_2) * SF
  45.  
  46. 'Bild 1 auf der Arbeitsfläche erweitern und in den Stack schieben
  47. left = Rand
  48. right = B_2 + B_1 * VS + 2 * Rand
  49. if H_2 > H_1 then
  50. top = (H_2 - H_1) / 2 + Rand
  51. else
  52. top = Rand
  53. end if
  54. bottom = top
  55.  
  56. FF_ExtendCanvas left,right,top,bottom,FarbWert_R,FarbWert_G,FarbWert_B
  57. FF_PushImage
  58.  
  59. 'Bild 2 laden und einfügen in Bild 1
  60. xstart = B_1 + B_1 * VS + 2 * Rand
  61. if H_1 > H_2 then
  62. ystart = (H_1 - H_2) / 2 + Rand
  63. else
  64. ystart = Rand
  65. end if
  66. width = B_2
  67. height = H_2
  68.  
  69. FF_LoadImage(Bild_2)
  70. FF_MixImage xstart,ystart,width,height,mix
  71.  
  72. 'Stackinhalt nach oben holen und auf Arbeitsfläche laden
  73. FF_PopImage
  74. FF_Reload
  75.  
  76. End Sub
  77. '-------------------------------------------------------------------------------------
  • 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

  1. 'Beispiel für das Zusammenfügen von zwei Bildern zu einem Bild
  2. 'Bild_1 und Bild_2 sind die markierten Bild im Computerverzeichnis
  3. 'Die Höhen werden angepasst auf die geringere Höhe beider Bilder
  4.  
  5. Option Explicit
  6.  
  7. if FF_GetImageCount < 2 then
  8. msgbox "Es müssen mindestens zwei Bilder markiert sein!",vbExclamation,"Abbruch"
  9. else
  10. call main
  11. end if
  12.  
  13. '-------------------------------------------------------------------------------------
  14. Sub main
  15. 'Bild_1 und Bild_2 in neues Bild einfügen
  16. 'mit Grundfarbe rot / Rand 10 px
  17. 'Die Bilderhöhen werden der Höhe des niedrigeren Bildes angepasst
  18.  
  19. const FarbWert_rgb = 255
  20. const Rand = 10 'Randstärke in px
  21. const mix = 256 'Stärke der Bildmischung (0-256), wirkt wie eine Transparenz
  22.  
  23. Dim Bild_1,Bild_2
  24. Dim B_1,H_1,B_2,H_2,H
  25. Dim xstart,ystart,width,height
  26.  
  27. Bild_1 = FF_GetImageName(0) 'erstes markiertes Bild in der Computeransicht
  28. Bild_2 = FF_GetImageName(1) 'zweites markiertes Bild in der Computeransicht
  29.  
  30. B_1 = FF_GetImageFileWidth(Bild_1)
  31. H_1 = FF_GetImageFileHeight(Bild_1)
  32. B_2 = FF_GetImageFileWidth(Bild_2)
  33. H_2 = FF_GetImageFileHeight(Bild_2)
  34.  
  35. 'Neues Bild erzeugen und in den Stack schieben
  36. if H_1 < H_2 then H = H_1 else H = H_2
  37. B_1 = B_1 * H / H_1
  38. B_2 = B_2 * H / H_2
  39.  
  40. FF_NewImage B_1 + B_2 + 3 * Rand,H + 2 * Rand,FarbWert_rgb
  41. FF_PushImage
  42.  
  43. 'Bild 1 laden und einfügen
  44. xstart = Rand
  45. ystart = Rand
  46. width = B_1
  47. height = H
  48.  
  49. FF_LoadImage(Bild_1)
  50. FF_MixImage xstart,ystart,width,height,mix
  51.  
  52. 'Bild 2 laden und einfügen
  53. xstart = B_1 + 2 * Rand
  54. ystart = Rand
  55. width = B_2
  56. height = H
  57.  
  58. FF_LoadImage(Bild_2)
  59. FF_MixImage xstart,ystart,width,height,mix
  60.  
  61. 'Stackinhalt nach oben holen und auf Arbeitsfläche laden
  62. FF_PopImage
  63. FF_Reload
  64.  
  65. End Sub
  66. '-------------------------------------------------------------------------------------

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

  1. 'Beispiel für das Zusammenfügen von zwei Bildern zu einem Bild
  2. 'Bild_1 und Bild_2 sind die markierten Bild im Computerverzeichnis
  3. 'Die Höhen werden angepasst auf die geringere Höhe beider Bilder
  4.  
  5. Option Explicit
  6.  
  7. if FF_GetImageCount < 2 then
  8. msgbox "Es müssen mindestens zwei Bilder markiert sein!",vbExclamation,"Abbruch"
  9. else
  10. call main
  11. end if
  12.  
  13. '-------------------------------------------------------------------------------------
  14. Sub main
  15. 'Bild_1 und Bild_2 in neues Bild einfügen
  16. 'mit Grundfarbe rot / Rand 10 px
  17. 'Die Bilderhöhen werden der Höhe des niedrigeren Bildes angepasst
  18.  
  19. const FarbWert_rgb = 255
  20. const Rand = 10 'Randstärke in px
  21. 'const mix = 256 'Transparenz - mit FF_DrawImage nicht verwendbar
  22.  
  23. Dim Bild_1,Bild_2
  24. Dim B_1,H_1,B_2,H_2,H
  25. Dim xstart,ystart,width,height
  26.  
  27. Bild_1 = FF_GetImageName(0) 'erstes markiertes Bild in der Computeransicht
  28. Bild_2 = FF_GetImageName(1) 'zweites markiertes Bild in der Computeransicht
  29.  
  30. B_1 = FF_GetImageFileWidth(Bild_1)
  31. H_1 = FF_GetImageFileHeight(Bild_1)
  32. B_2 = FF_GetImageFileWidth(Bild_2)
  33. H_2 = FF_GetImageFileHeight(Bild_2)
  34.  
  35. 'Neues Bild erzeugen und in den Stack schieben
  36. if H_1 < H_2 then H = H_1 else H = H_2
  37. B_1 = B_1 * H / H_1
  38. B_2 = B_2 * H / H_2
  39.  
  40. FF_NewImage B_1 + B_2 + 3 * Rand,H + 2 * Rand,FarbWert_rgb
  41. 'FF_PushImage - entfällt hier
  42.  
  43. 'Bild 1 laden und einfügen
  44. xstart = Rand
  45. ystart = Rand
  46. width = B_1
  47. height = H
  48.  
  49. 'FF_LoadImage(Bild_1) - entfällt hier
  50. 'FF_MixImage xstart,ystart,width,height,mix - wird ersetzt durch nächsten Befehl
  51. FF_DrawImage Bild_1,xstart,ystart,width,height
  52.  
  53. 'Bild 2 laden und einfügen
  54. xstart = B_1 + 2 * Rand
  55. ystart = Rand
  56. width = B_2
  57. height = H
  58.  
  59. 'FF_LoadImage(Bild_2) - entfällt hier
  60. 'FF_MixImage xstart,ystart,width,height,mix - wird ersetzt durch nächsten Befehl
  61. FF_DrawImage Bild_2,xstart,ystart,width,height
  62.  
  63. 'Stackinhalt nach oben holen und auf Arbeitsfläche laden
  64. 'FF_PopImage - entfällt hier
  65. FF_Reload
  66.  
  67. End Sub
  68. '-------------------------------------------------------------------------------------

Die Anwendung von FF_DrawImage dürfte schneller sein, erfordert aber mindestens die FF-Version 3.02.