Moin Leute
Ich hänge in Informatik fest.
Wir müssen nämlich ein Programm schreiben welches Ränder erkennt von ausgefülltern objekten.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var n,t,pixel1,pixel2,pixel3:integer;
schwellenwert1,schwellenwert2,schwellenwert3 :extended;
begin
for n:=1 to hoehe do
begin
for t:=1 to breite do
begin
pixel1:=image1.Canvas.Pixels[n,t];
pixel2:=image1.canvas.pixels[n,t-1];
pixel3:=image1.canvas.pixels[n-1,t];
schwellenwert1:= (pixel1 * 0.5) + (pixel2 * 0.5);
schwellenwert2:= (pixel1 * 0.5) + (pixel3 * 0.5);
schwellenwert3:= (pixel2 * 0.5) + (pixel3 * 0.5);
if schwellenwert1 = (16777215 * 0.5) then
begin
image2.Canvas.Pixels[n,t]:=clblack;
end;
if schwellenwert2 =(16777215 * 0.5) then
begin
image2.Canvas.Pixels[n,t]:=clblack;
end;
if schwellenwert3 =(16777215 * 0.5) then
begin
image2.Canvas.Pixels[n,t]:=clblack;
end;
end;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var k,n,t,pixel1,pixel2,pixel3:integer;
gewichtung1,gewichtung2,gewichtung3:extended;
begin
k:=6;
for n:=1 to hoehe -2 do
begin
P1:=Image1.Picture.Bitmap.ScanLine[n];
P2:=Image1.Picture.Bitmap.ScanLine[n+1];
//P3:=image1.Picture.Bitmap.ScanLine[n];
for t:=1 to (breite*3) do
begin
pixel1:=P1[t+3];
pixel2:=P2[t+3];
pixel3:=P1[t+k];
k:=k+3;
gewichtung1:= pixel1+pixel2+pixel3;
if gewichtung1 = 255 then
begin
image2.Canvas.Pixels[n,t]:=clblack;
end;
if gewichtung1 = 510 then
begin
image2.Canvas.Pixels[n,t]:=clblack;
end
end;
end;
Die erste Procedur funktioniert, jedoch meinte mein Lehrer, dass die zu lange braucht und ich es lieber mit der Scanline probieren soll, da die 100 mal schneller ist.
Brauch dirgend hilfe komm einfach nicht weiter.
ergibt mir immer ein Fehler aus in der Zeile wo ich pixel3 berechne.
Danke schonmal im vorraus