Hilfe

Über FilterFX Skript

FilterFX Skript ist eine mächtige Skriptsprache zum Manipulieren von Bildinhalten (Pixel). Sie können Pixel in einem Bild erstellen, löschen oder so ändern wie Sie das möchten. FilterFX Skript basiert auf der Pascal Programmiersprache und ist deshalb einfach zu erlernen und zu verstehen. Besuchen Sie http://www.pascal-programming.info um mehr über das Programmieren in Pascal zu erfahren.

Eine genauerer Blick auf ein FilterFX Skript

Das Skript
Dieses FilterFX Skript wendet eine Scharfzeichnen Faltungsmatrix auf den Helligkeits-Kanal eines Bildes an. Dieses Skript wurde ursprünglich von Dan Ritchie erstellt und angepasst um mit FilterFX kompatibel zu sein.
// Die Variablen Deklaration
var
  Kernel: array[0..2,0..2] of Integer;
  Divisor: Integer;
  Offset: Integer;

// Die Faltungsmatrix Filter Funktion function Filter(const X,Y: Integer): Single; var i,j: Integer; Pixel: TPixelHSV; Sum: Single; begin Sum := 0.0; for i := -1 to 1 do begin for j := -1 to 1 do begin Pixel := Color.RGBAToHSV(FFX.Src.GetPixelRGBA(X+i,Y+j)); Sum := Sum + (Kernel[J+1][I+1] * Pixel.V); end; end; Result := (Sum / Divisor) + Offset; end;

// Skript Initialisierung vor der Ausfuehrung procedure FFXPrepare; begin Kernel[0,0] := -1; Kernel[0,1] := -1; Kernel[0,2] := -1; Kernel[1,0] := -1; Kernel[1,1] := 12; Kernel[1,2] := -1; Kernel[2,0] := -1; Kernel[2,1] := -1; Kernel[2,2] := -1; Divisor := 4; Offset := 0; end;

// Skript Ausfuehrung procedure FFXApply(const Bounds: TBounds); var X,Y: Integer; Pixel: TPixelRGBA; HSV: TPixelHSV; begin for Y := Bounds.Y1+1 to Bounds.Y2-2 do begin for X := Bounds.X1+1 to Bounds.X2-2 do begin Pixel := FFX.Src.GetPixelRGBA(X,Y); if Pixel.A > 0 then begin HSV := Color.RGBAToHSV(Pixel); HSV.V := Filter(X,Y); FFX.Dst.SetPixelRGBA(X,Y,Color.HSVToRGBA(HSV)); end; end; end; end;

begin end.

Die Variablen Deklaration
var
  Kernel: array[0..2,0..2] of Integer;
  Divisor: Integer;
  Offset: Integer;
Kernel ist ein zwei dimensionales Feld welches die 3x3 Faltungsmatrix enthält und später auf das Bild angewendet wird um es zu schärfen. Die anderen Variablen gehören also zur Faltungsmatrix Verarbeitung. Besuchen Sie http://de.wikipedia.org/wiki/Faltungsmatrix um mehr darüber zu erfahren.

Die Faltungsmatrix Filter Funktion
function Filter(const X,Y: Integer): Single;
var
  i,j: Integer;
  Pixel: TPixelHSV;
  Sum: Single;
begin
  Sum := 0.0;
  for i := -1 to 1 do
  begin
    for j := -1 to 1 do
    begin
      Pixel := Color.RGBAToHSV(FFX.Src.GetPixelRGBA(X+i,Y+j));
      Sum := Sum + (Kernel[J+1][I+1] * Pixel.V);
    end;
  end;  
  Result := (Sum / Divisor) + Offset;
end;
Diese Funktion wendet die Faltungsmatrix auf den Hellwert eines Pixel im HSV Farbraum an der angegebenen Postion an. Dafür liest die Funktion alle umliegende Pixel um den Quellpixel im HSV Farbraum ein und berechnet die Ergebnis HSV Pixel Hellwert aus diesen. Dieser Wert wird anschließend dann zurückgegeben.

Skript Initialisierung vor der Ausführung
procedure FFXPrepare;
begin
  Kernel[0,0] := -1;
  Kernel[0,1] := -1;
  Kernel[0,2] := -1;  
  Kernel[1,0] := -1;
  Kernel[1,1] :=  12;
  Kernel[1,2] := -1;  
  Kernel[2,0] := -1;
  Kernel[2,1] := -1;
  Kernel[2,2] := -1; 
  Divisor := 4;
  Offset := 0;
end;
Diese Methode wird als erstes ausgeführt wenn das Skript auf ein Bild angewendet wird. Sie initialisiert alle Variablen mit den benötigten Werten. Wobei Kernel mit einer Standard Scharfzeichnen Matrix initialisiert wird.
FFXPrepare ist eine von drei festgelegten Einsprungspunkten welche bevor, während und nach dem Anwenden eines FilterFX Skript auf ein Bild ausgeführt wird.

Skript Ausführung
procedure FFXApply(const Bounds: TBounds);
var
  X,Y: Integer;
  Pixel: TPixelRGBA;
  HSV: TPixelHSV;
begin
  for Y := Bounds.Y1+1 to Bounds.Y2-2 do
  begin   
    for X := Bounds.X1+1 to Bounds.X2-2 do
    begin
      Pixel := FFX.Src.GetPixelRGBA(X,Y);
      if Pixel.A > 0 then
      begin
        HSV := Color.RGBAToHSV(Pixel);
        HSV.V := Filter(X,Y);
        FFX.Dst.SetPixelRGBA(X,Y,Color.HSVToRGBA(HSV));
      end;
    end;
  end;
end;
Diese Methode ist der Haupteinsprungspunkt eines FilterFX Skripts in welcher der gesamte Bildinhalt manipuliert wird. Diese Methode durchläuft alle Pixel innerhalb des angegeben Bereichs des Bildes und wendet die Faltungsmatrix auf diese an. Da alle Quellpixel im RGB Farbraum vorhanden sind, werden diese zuerst in den HSV Farbraum umgewandelt um den Hellwert zu schärfen und danach wieder zurück in den RGB Farbraum umgewandelt um die Zielpixel zu aktualisieren.
Bitte beachten Sie, dass das Ergebnis Ihrer Bildmanipulation immer in den Dst Pixelbuffer des FFX Objekts gesetzt werden muss. Der Src Pixelbuffer erlaubt nur Lesen Zugriff.

Feedback