Ü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.
// 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.
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.
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.
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.
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.