Сообщение о ошибке с текстом Invalid pointer operation выскакивает после выполнения программы. Программа делает медианную фильтрацию- устраняет шум изображений, размер каретки устанавливаю я (нюанс метода фильтрации), при этом использую динамические массивы, до этого каретка в фильтрации была 3х3 и массивы были статические ошибки не было. Прошу подсказать почему выскакивает ошибка.
Вот полностью главный юнит
http://depositfiles.com/files/ivq005c7g
http://4ppl.ru/162538
Вот сама программа
http://4ppl.ru/162539
Ниже код процедуры самой фильтрации
Код:
procedure TMainForm.Filter1Click(Sender: TObject);
var
i,j,k,l,r,q,g,b,w,ser:integer;
t:boolean;
vecr:array of integer;
br:array of array of integer;
can:byte;
begin
setlength (vecr,si*si);
setlength (br,si,si);
if fl1 then
pb.Min:=0;
pb.Max:=bmp.Width-1;
pb.Position:=0;
begin
for i:=0 to paintbox.Width-2 do
begin
for j:=0 to paintbox.Width-2 do
begin
for k:=0 to si-1 do // обнуление массиовов
begin
for l:=0 to si-1 do
begin
br[k,l]:=0;
end;
end;
for k:=0 to si-1 do // Расчёт значения каждого канала в маске
begin
for l:=0 to si-1 do
begin
can:=paintbox.Canvas.Pixels[i+k,j+l];
r:=getrvalue(can);
g:=getgvalue(can);
b:=getbvalue(can);
br[k,l]:=trunc(sqrt(r*r+g*g+b*b));
end;
end;
q:=0;
for k:=0 to si-1 do // переписываем полученные значения каналов
begin // в маске, в вектор для последующей их сортировки
for l:=0 to si-1 do
begin
q:=q+1;
vecr[q]:=br[k,l];
end;
end;
t :=true;
while t do
begin
t:=false;
for k:=1 to si*si-1 do //метод пузырька
begin
if vecr[k]>vecr[k+1] then
begin
w:=vecr[k];
vecr[k]:=vecr[k+1];
vecr[k+1]:=w;
t:=true;
end;
end;
end;
ser:=(trunc((si*si)/2))+1;
paintbox1.Canvas.Pixels[i+1,j+1]:=rgb(vecr[ser],vecr[ser],vecr[ser]);
pb.Position:=pb.Position+1;
end;
end;
end;
lmikle: пользуем правильные теги!!!
Понимаю что чужой код смотреть ни кому не горит желанием. Но буду рад любой помощи или совету. Заранее спасибо
Спасибо Imikle за правку и совет.