Книга программиста/Фильтрация изображений на PascalABC.Net: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 244:
uses GraphABC;
var
ImagePic1, ImgFPic2: array [,] of ColorPicture;
Pic1: Picture;
FilterMatrix: array [0..2, 0..2] of real;
S: real;
Строка 257 ⟶ 256 :
 
begin
Pic1 := new Picture('C:\Ilya\MjcVeXIf.jpg');
SetWindowIsFixedSize(true);
SetWindowSize(Pic1.Width, Pic1.Height);
CenterWindow();
SetLength(Image, Pic1.Width, Pic1.Height);
SetLength(ImgF,Pic2 := new Picture(Pic1.Width, Pic1.Height);
for var i := 1 to Length(Image, 0)Pic1.Width - 2 do
for var j := 1 to Length(Image, 1)Pic1.Height - 2 do
Image[Pic2.PutPixel(i, j] :=, Pic1.GetPixel(i, j));
FilterMatrix[0, 0] := 1; FilterMatrix[0, 1] := 1; FilterMatrix[0, 2] := 1;
Строка 268 ⟶ 270 :
FilterMatrix[2, 0] := 1; FilterMatrix[2, 1] := 1; FilterMatrix[2, 2] := 1;
LockDrawing();
for var i := 0 to Length(Image, 0) - 1 do
for var ji := 01 to Length(Image, 1)Pic1.Width - 12 do
for var j := 01 to Length(Image, 1)Pic1.Height - 12 do
begin
Image[i, j] := Pic1.GetPixel(i, j);
ImgF[i, j] := Image[i, j];
end;
for var i := 1 to Length(Image, 0) - 2 do
for var j := 1 to Length(Image, 1) - 2 do
begin
for var i2 := i - 1 to i + 1 do
for var j2 := j - 1 to j + 1 do
begin
var m := FilterMatrix[i2 - (i - 1), j2 - (j - 1)];
Rvar c := R + Image[Pic1.GetPixel(i2, j2].R * m);
GR := GR + Image[i2, j2]c.GR * m;
BG := BG + Image[i2, j2]c.BG * m;
B := B + c.B * m;
S := S + m;
end;
Строка 296 ⟶ 293 :
TruncColor(rB);
ImgF[Pic2.PutPixel(i, j] :=, RGB(rR, rG, rB));
R := 0;
Строка 302 ⟶ 299 :
B := 0;
S := 0;
end;
LockDrawingPic2.Draw();
for var i := 0 to Length(Image, 0) - 1 do
for var j := 0 to Length(Image, 1) - 1 do
PutPixel(i, j, ImgF[i, j]);
Redraw();
end.