Skript Probleme mit FF_Blend

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#1
Kann mir jemand von den Skriptern bei der Funktion FF_Blend helfen?

Code:
FF_PushImage
FF_LoadImage Rahmen		'Laden der Maske
FF_SwapImage

call FF_Blend(0,12,256)		'Subrahieren

FF_PopImage
FF_Reload
  • Das Bild auf der Arbeitsfläche wird auf den Stack geschoben.
  • Ein Maskenbild wird geladen.
  • Die beiden Bilder werden vertauscht.
  • Dann sollen sie subtrahiert werden.
    Es erfolgt die Fehlermeldung "Wertebereich überschritten".
    Mache ich den Stackindex > 0, erfolgt die Fehlermeldung "kein Bild geladen".
Was mache ich falsch?

Das nächste Problem ist folgendes:
Ich möchte statt Subtrahieren den Modus Einfärben (blendmode 3) verwenden. Wie stelle ich die Farbe ein?
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#2
AW: Probleme mit FF_Blend

Hat niemand eine Idee?

In der Bedienanleitung steht
Funktion
FF_Blend(VT_I4 stackindex, VT_I4 blendmode[0-14], VT_I4 mix[0-256])

Beschreibung
Verrechnet zwei Bilder mithilfe verschiedener Mischmodi

Argumente
stackindex = Bild auf dem Stack, mit dem das momentan aktuelle verrechnet werden soll
blendmode = Mischmodus
z.B. (kleine Auswahl):
3 = Einfärben
12 = Subtrahieren

Erläuterung der Mischmodi siehe: Effekte → Bild überlagern

mix = Stärke des Effektes
Wie soll man das anders umsetzen als ich es getan habe ???

Außerdem zur Farbdefinition für den Modus "Einfärben":
In der Erläuterung zu "Bild überlagern"kann man nachlesen:
Einfärben
Dies ist der Standardmodus, bei dem alle weißen Pixel unverändert gelassen, während dunkle Pixel durch die ausgewählte Farbe ersetzt werden.
Wie wird aber im Skript die Farbe definiert ???
 

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#3
AW: Probleme mit FF_Blend

Hallo Harald,

ich würde folgendes probieren:

1. Maske/Blendvorlage auf genau die gleiche Größe bringen (Seitenverh.nicht beibehalten)

2. Testhalber ein paar zusätzliche Versionen auf den Stack schieben, damit der Fehler ausgeschlossen werden kann - und später nachsehen, welche wie verändert wurde.

3. Ob die Mischmodi richtig sind? Die Reihenfolge sieht in der Beschreibung doch anders aus? Hat aber mit dem Fehler nichts zu tun.

4. Die Farbe stellst Du ein, indem Du mit NewImage eine Blendvorlage in der gewünschten Colorierung anlegst und mit einem der Überblendmodi einblendest. Die Bezeichnung 'einfärben' als Blendmodus ist an dieser Stelle vielleicht etwas mißdeutig.

5. Vielleicht nicht mit 256 mixen?

Soweit nur aus dem Gedächtnis. Die Funktion werde ich erst später in mein Script integrieren. Vielleicht sollte Joachim Punkt 1 in der Funktion abfangen, denn im Gegensatz zum Mixbefehl läßt sich hier ja keine abweichende Koordinate für die Einblendung vergeben.

Hoffentlich hilft es Dir

Walter
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#4
AW: Probleme mit FF_Blend

Hallo Walter,
danke für Deine Tipps. Leider komme ich damit nicht weiter.

Ich bin davon ausgegangen, dass FF_Blend das gleiche bewirkt, was unter Effekte "Bild überlagern" bewirkt. Das scheint aber nicht der Fall zu sein.

Wenn man die Maske und das aktive Bild auf die gleiche Größe bringt, erfolgt die Fehlermeldung "Wertebereich überschritten" nicht mehr und auch keine andere (bei manueller Bildüberlagerung spielen die Größen keine Rolle).
Aber FF_Blend zeigt keine Wirkung, egal welcher Blendmodus oder welcher Mixwert eingestellt wird. Angezeigt wird nach Aufruf das Maskenbild oder, wenn ich FF_SwapImage auskommentiere, das aktive Bild.

Mit der Farbeinstellung liegst Du, glaube ich nicht richtig. Nochmal, die Beschreibung sagt folgendes:
Einfärben
Dies ist der Standardmodus, bei dem alle weißen Pixel unverändert gelassen, während dunkle Pixel durch die ausgewählte Farbe ersetzt werden.
Der Zweck der Beschäftigung mit FF_Blend liegt darin, dass ich ein Skript schreiben möchte, mit dem man Bildern "runde" Ecken verpassen kann. Mit "Bild überlagern" geht das händisch ganz einfach. Man erstellt ein weißes Bild mit schwarzen Rundungen in den Ecken, das man im Maskenverzeichnis ablegt. Wählt man jetzt den Blendmodus "Einfärben", kann man wählen welche Farbe die "runden Ecken" als Hintergrund haben sollen (Transparenzeinstellung 256). Die übrige Bildfläche bleibt dabei im Original erhalten.

Hat noch jemand eine Idee oder funktioniert FF_Blend einfach nicht (FF 3.30 B64) ?
 

m.s

FF-Team
Mitarbeiter
Dabei seit
19.09.02
Beiträge
11.274
#5
AW: Probleme mit FF_Blend

Also bei mir funktionierts so:

Code:
FF_LoadImage("mask.png");
FF_PushImage();
FF_LoadImage("bild.jpg");
FF_Blend(0,3,255);
Das da:
... VT_I4 mix[0-256])
ist ein Fehler in der Hilfe, den ich umgehend korrigieren werde. Der Wertebereich geht nur bis 255.
 

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#6
AW: Probleme mit FF_Blend

5. Vielleicht nicht mit 256 mixen?
Hat Harald ja schon ausprobiert. ;)


@Harald: Hast Du auch daran gedacht?

index = Nummer des Bildes auf dem Stack (0 = ältestes Bild/ganz unten)
Der Befehl ist nicht kaputt, er funktioniert wie am ersten Tag, wenn auch so wie eine Diva.



Man erstellt ein weißes Bild mit schwarzen Rundungen in den Ecken, das man im Maskenverzeichnis ablegt. Wählt man jetzt den Blendmodus "Einfärben", kann man wählen welche Farbe die "runden Ecken" als Hintergrund haben sollen (Transparenzeinstellung 256). Die übrige Bildfläche bleibt dabei im Original erhalten.
Dann nimm' doch die kürzlich von mir vorgestellte Verfahrensweise des 'maskiert ersetzens' im Skript. Da entfällt das Merken der Stackposition.
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#7
AW: Probleme mit FF_Blend

Hallo Michael,
bei meinem Code (siehe oben) war der Befehl FF_PopImage vor FF_Reload zu viel ]:(.
Es bleibt folgendes:
  • Maske und Bild müssen gleich groß sein (bitte in der Hilfe darauf hinweisen)
  • Der Mixwert darf max. 255 betragen (wird, wie Du sagst, korrigiert)
  • Der Modus "Einfärben" ist nicht nutzbar, da es keine Möglichkeit der Farbeinstellung gibt (auch hierauf sollte in der Hilfe hingewiesen werden).

@ Walter
Dann nimm' doch die kürzlich von mir vorgestellte Verfahrensweise des 'maskiert ersetzens' im Skript. Da entfällt das Merken der Stackposition.
Damit werde ich mich jetzt nochmal auseinander setzen.
 

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#8
AW: Probleme mit FF_Blend

@ Walter
Damit werde ich mich jetzt nochmal auseinander setzen.
Wenn was unklar, dann ruhig fragen. Kleiner Tipp: Damit ließe sich dann auch die Drehung eines eingefügten Bildes in eine Collage mit Transparenz realisieren. Die Frage danach kam schon mal, wird aber momentan wohl nicht Deine Baustelle sein.

VG, Walter
 

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#10
AW: Probleme mit FF_Blend

Darauf warten sicher viele schon lange :D!

Gruß
Alfred
SHOWTIME :
Code:
//FFSubmenu=Effekte
//FFName=test-gedreht-einfügen
//Idee und Realisation : Walter Wichmann (Walter-46) im Februar 2012

var xx=FF_GetImagewidth();var yy=FF_GetImageheight();
FF_PushImage();FF_PushImage(); 

//********** Maske erstellen : Innen schwarz + Außen weiss für Mixbild B ****

FF_NewImage(xx, yy, 16777215);FF_Rotate(17,0,255); FF_HQScale(xx/3, yy/3,1)
var xk=FF_GetImagewidth();var yk=FF_GetImageheight();

FF_ExtendCanvas((xx-xk)/2-3,(xx-xk)/2-3, (yy-yk)/2-3,(yy-yk)/2-3 ,255,0,0) 
FF_ExtendCanvas(3,3,3,3,128,0,64) 
FF_HQScale(xx, yy,0);  

FF_PushImage();FF_SpectralSaturation(360,350, 0); 
FF_Diff();FF_Monochrome(1,1,1);FF_Autocontrast();

FF_Negate();FF_Killmask();FF_Putmask();FF_PopImage(); 

//********** Mixbild A vorbereiten : kleines Bild innen + Umgebung schwarz *****

FF_PopImage(); FF_Rotate(17,0,0); FF_HQScale(xx/3, yy/3,1)
FF_ExtendCanvas((xx-xk)/2,(xx-xk)/2, (yy-yk)/2,(yy-yk)/2 ,0,0,0)  
FF_HQScale(xx, yy,0); 

//********** Mixbild B vorbereiten *******************************

FF_SwapImage();FF_rgbgamma(0,1,0.5,0,0, 0,1,0.5,0,0,  0,1,0.5,0,0) 

FF_MixImage(0,0,xx,yy,-1);  // addieren

FF_PopImage();
FF_Reload();
VG, Walter
 

praetor

Mitglied
Dabei seit
24.10.04
Beiträge
2.144
Standort
Berlin
Trophäen
{**!!!}**!!!!! !!!!! !!
#12
AW: Probleme mit FF_Blend

Wirklich sehr interessant!
Ideal wäre es, wenn sich auf der Grundlage ein Einfügeskript (PasteScript_ ...) bauen ließe. Meinst Du das geht, Walter?
 

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#13
AW: Probleme mit FF_Blend

Wirklich sehr interessant!
Ideal wäre es, wenn sich auf der Grundlage ein Einfügeskript (PasteScript_ ...) bauen ließe. Meinst Du das geht, Walter?
Das scheitert zunächst einmal daran, dass dem Script zur Laufzeit nicht bekannt sein kann, an welcher Position der User das Bild später einfügen wird. Eine Lösung gibts m.E. nur dann, wenn das Bild per Script gedreht und mit Alphakanal versehen wieder ins Clipboard geschoben werden kann. Du kannst aber ja eine GUI im dieses Codefragment basteln, das die komplette Aufgabe erledigt.

Alphakanal (oder als .png-Datei) läßt sich meines Wissens nicht im Script generieren. Es wäre schön, wenn ich mich hier irren täte.

VG, Walter
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#14
AW: Probleme mit FF_Blend

Hallo Walter,
ein schönes Skript hast Du da vorgestellt. Gerade habe ich es getestet. Es gehört eigentlich in die Skript-Wiki - wie wärs?

Ich werde das mal in vbs übersetzen und dann möglicherweise in Collage+ einbauen, mal sehen :D.
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#15
AW: Probleme mit FF_Blend

Und hier ist die vbs-Version:
Code:
'FFSubmenu=Test
'FFName=Gedreht einfügen als vbs

'Idee und Realisation als Javaskript: Walter Wichmann (Walter-46) im Februar 2012
'Übersetzung in Visual Basic: Harald Maeckler (Mecki14) im Februar 2012

xx=FF_GetImagewidth
yy=FF_GetImageheight
FF_PushImage
FF_PushImage

'********** Maske erstellen : Innen schwarz + Außen weiss für Mixbild B ****

FF_NewImage xx, yy, 16777215
FF_Rotate 17,0,255
FF_HQScale xx/3, yy/3,1
xk = FF_GetImagewidth
yk = FF_GetImageheight

FF_ExtendCanvas (xx-xk)/2-3,(xx-xk)/2-3,(yy-yk)/2-3,(yy-yk)/2-3,255,0,0
FF_ExtendCanvas 3,3,3,3,128,0,64
FF_HQScale xx,yy,0

FF_PushImage
FF_SpectralSaturation 360,350, 0
FF_Diff
FF_Monochrome 1,1,1
FF_Autocontrast

FF_Negate
FF_Killmask
FF_Putmask
FF_PopImage 

'********** Mixbild A vorbereiten : kleines Bild innen + Umgebung schwarz *****

FF_PopImage
FF_Rotate 17,0,0
FF_HQScale xx/3,yy/3,1
FF_ExtendCanvas (xx-xk)/2,(xx-xk)/2,(yy-yk)/2,(yy-yk)/2,0,0,0
FF_HQScale xx, yy,0

'********** Mixbild B vorbereiten *******************************

FF_SwapImage
FF_rgbgamma 0,1,0.5,0,0, 0,1,0.5,0,0,  0,1,0.5,0,0

FF_MixImage 0,0,xx,yy,-1

FF_PopImage
FF_Reload
 

praetor

Mitglied
Dabei seit
24.10.04
Beiträge
2.144
Standort
Berlin
Trophäen
{**!!!}**!!!!! !!!!! !!
#16

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#17
AW: Probleme mit FF_Blend

Schön gemacht! Dann darfst Du das auch gleich ins Wiki packen ;D

Zur Ergänzung:

In dem Code nutze ich die Zufällige Situation, dass die Befehle 'FF_Rotate' und 'FF_ExtendCanvas' in der Lage sind, die schwarze Fläche gleich mit zu produzieren.

Die ursprüngliche Vorgehensweise ist so, dass zuerst eine Maske mit voller Deckung (FF_Autokontrast) erstellt wird, und Bild A damit geschwärzt wird. Dann wird die Maske umgekehrt und in Bild B werden die anderen Bereiche geschwärzt. Damit bist Du unabhängig von den Funktionen, die schwarz als 'Beiwerk' mitliefern...

VG, Walter
 

Mecki14

Mitglied
Dabei seit
15.03.06
Beiträge
2.810
Standort
Düsseldorf
Trophäen
einige {*} {!} * !
#18
AW: Probleme mit FF_Blend

Schön gemacht! Dann darfst Du das auch gleich ins Wiki packen ;D

Zur Ergänzung:
In dem Code nutze ich die Zufällige Situation, dass die Befehle 'FF_Rotate' und 'FF_ExtendCanvas' in der Lage sind, die schwarze Fläche gleich mit zu produzieren.
Mache ich doch glatt, siehe Transparenz

Anmerkung zu Deiner Ergänzung:
Genau das hast Du in Deinem Skriptbeispiel nicht gemacht, was aber gut ist, weil so gezeigt wird, wie man die Einfärbungen vornehmen kann.
In der Skript-Wiki habe ich Dein Beispiel deshalb als Javaskript im Original übernommen und bei meiner Übersetzung in VBS habe ich die Möglichkeit der schwarzen Einfärbung bei 'FF_Rotate' und 'FF_ExtendCanvas' genutzt.

Ich hoffe Du bist damit einverstanden.
 

Walter-46

Mitglied
Dabei seit
08.10.06
Beiträge
1.744
Standort
Meppen
Trophäen
*****!!! {**!!!}
#19
AW: Probleme mit FF_Blend

Klar doch! Du hast das ja schön abgekürzt, so ist es vielleicht auch verständlicher.

Unsere beiden Versionen unterscheiden sich nur in der Maskenerstellung. Für die Bilder selber nutzen beide Versionen exakt den gleichen Ablauf. ;)

Für Deine Collage+ ist es so vielleicht auch sinnvoller. Mit der Entfärung in Kombination mit FF_Diff() hingegen wirst Du flexibler sein. Dort basiert die Maskierung nicht allein auf Zufälligkeiten im Zusammenhang mit FF_Rotate und FF_ExtendCanvas.

VG, Walter
 
Oben