mirror of
https://github.com/moparisthebest/Simba
synced 2024-11-30 04:42:21 -05:00
90 lines
2.2 KiB
Plaintext
90 lines
2.2 KiB
Plaintext
|
program new;
|
||
|
|
||
|
function BlurBMP( Bmp : TMufasaBitmap; N : integer; Sigma : extended) : TMufasaBitmap;
|
||
|
var
|
||
|
Matrix : T2DExtendedArray;
|
||
|
x,y,xx,yy : integer;
|
||
|
R,G,B : extended;
|
||
|
RR,GG,BB : integer;
|
||
|
mid : integer;
|
||
|
xmax,ymax : integer;
|
||
|
begin
|
||
|
Matrix := GaussMatrix(n,sigma);
|
||
|
result := GetMufasaBitmap(ConvoluteBitmap(bmp.Index,matrix));
|
||
|
end;
|
||
|
|
||
|
function BlurBMP2( Bmp : TMufasaBitmap; N : integer; Sigma : extended) : TMufasaBitmap;
|
||
|
var
|
||
|
Mat : TExtendedArray;
|
||
|
Values : Array of Array of Array[0..2] of Extended;
|
||
|
x,y,xx,yy : integer;
|
||
|
R,G,B : extended;
|
||
|
RR,GG,BB : integer;
|
||
|
mid : integer;
|
||
|
xmax,ymax : integer;
|
||
|
begin
|
||
|
Result := TMufasaBitmap.create;
|
||
|
result.SetSize(Bmp.Width,bmp.Height);
|
||
|
Setlength(Values,bmp.width);
|
||
|
for x := 0 to high(values) do
|
||
|
setlength(Values[x],bmp.height);
|
||
|
mid := (N*2-1)/2;
|
||
|
Mat := DiscreteGauss(-mid,mid,sigma);
|
||
|
xmax :=bmp.Width - 1 - mid;
|
||
|
ymax := bmp.height - 1 - mid;
|
||
|
for x := mid to xmax do
|
||
|
for y := mid to ymax do
|
||
|
begin
|
||
|
R := 0;
|
||
|
G := 0;
|
||
|
B := 0;
|
||
|
for xx := x to x + 2*mid do
|
||
|
begin
|
||
|
ColorToRGB(Bmp.FastGetPixel(xx-mid,y),RR,GG,BB);
|
||
|
r := r + RR * Mat[xx-x];
|
||
|
g := g + GG * Mat[xx-x];
|
||
|
b := b + BB * Mat[xx-x];
|
||
|
end;
|
||
|
Values[x][y][0] := r;
|
||
|
Values[x][y][1] := g;
|
||
|
Values[x][y][2] := b;
|
||
|
end;
|
||
|
for x := mid to xmax do
|
||
|
for y := mid to ymax do
|
||
|
begin
|
||
|
R := 0;
|
||
|
G := 0;
|
||
|
B := 0;
|
||
|
for yy := y to y + 2*mid do
|
||
|
begin
|
||
|
r := r + Values[x][yy-mid][0] * Mat[yy-y];
|
||
|
g := g + Values[x][yy-mid][1] * Mat[yy-y];
|
||
|
b := b + Values[x][yy-mid][2] * Mat[yy-y];
|
||
|
end;
|
||
|
Result.FastSetPixel(x,y,RGBtoColor(Round(R),Round(G),Round(B)));
|
||
|
end;
|
||
|
end;
|
||
|
var
|
||
|
s : extended;
|
||
|
sArr : TextendedArray;
|
||
|
Matrix : T2DExtendedArray;
|
||
|
i,ii : integer;
|
||
|
BMP : TMufasaBitmap;
|
||
|
BMP2 : TMufasaBitmap;
|
||
|
begin
|
||
|
BMP := TMufasaBitmap.create;
|
||
|
BMP.LoadFromFile('c:\rs.png');
|
||
|
i := GetSystemTime;
|
||
|
BMP2 := BlurBMP(BMP,2,0.9);
|
||
|
Writeln(GetSystemTime - i);
|
||
|
BMP2.SaveToFile( 'c:\rs2.bmp');
|
||
|
BMP2.Free;
|
||
|
i := GetSystemTime;
|
||
|
BMP2 := BlurBMP2(BMP,2,0.9);
|
||
|
Writeln(GetSystemTime-i);
|
||
|
BMP2.SaveToFile('c:\rs3.bmp');
|
||
|
BMP2.Free;
|
||
|
|
||
|
|
||
|
end.
|