Hallo Renate,
es gibt verschiedene Lanczos Varianten. Dein Lanczos sieht bei mir so aus:
Delphi-Quellcode:
function LanczosXFilter(Value: Extended; LanczosWidth: Integer): Extended;
var
y, yinv: Extended;
begin
Value := abs(Value);
if Value = 0 then
Result := 3
else if Value < 1 then begin
y := Pi * Value;
yinv := 1 / y;
Result := sin(3 * y) * sin(y) * yinv * yinv;
end else
Result := 0;
end;
Es erzeugt eine Rasterung bei 80% Verkleinerung, siehe Anhang Lanczos.jpg
Meine Variation von Lanczos erzeugt kein Raster:
Delphi-Quellcode:
function LanczosXFilter(Value: Extended; LanczosWidth: Integer): Extended;
// Normalisierte SinC Funktion = sin(Pi*x) / (Pi*x)
function SinC(Value: Extended): Extended;
begin
if Value <> 0 then begin
Value:= Value * Pi;
Result:= Sin(Value) / Value;
end else
Result:= 1;
end;
begin
if Value < 0 then
Value:= -Value;
if Value < LanczosWidth then
Result:= SinC(Value) * SinC(Value / LanczosWidth)
else
Result:= 0;
end;
Weiter finde ich es problematisch auf 3rd Party MfPack, zu verweisen, das es inzwischen in mehr als 4 unterschiedlichen Versionen mit unterschiedlichen Unitnamen gibt. Daduch erhält dein
Package eine Halbwertszeit von MfPack. Nicht gut!
Auch die Objektorientierte Kapselung mit Class of Funktionen in Records usw. ist total overpowered. Die tatsächlichen WindowAPI Funktionen sind keine Class Funktionen, brauchen das nicht.
Liebe Grüße
Klaus Schaaff