Also, soweit bin ich gekommen ...
Bmp's einlesen ist klar:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.Loadfromfile('N:\studium_pool\MBI\praktikum 5\1sw.bmp');
Image2.Picture.Loadfromfile('N:\studium_pool\MBI\praktikum 5\2sw.bmp');
Image1.AutoSize := True;
Image2.AutoSize := True;
end;
Dann das Differenzbild erzeugen macht er auch ohne Probleme:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,j :integer;
begin
for i:=0 to image1.width-1 do begin
for j:=0 to image1.Height-1 do begin
image3.Canvas.pixels[i,j]:=$00FFFFFF and (not (image1.Canvas.pixels[i,j]-image2.Canvas.pixels[i,j]));
end;
end;
end;
Ich habe jetzt ein Problem mit dem Kreis. Lt. Aufgabenstellung soll dies mit der Prozedur roter_kreis geschehen. Ich habe also zuvor folgende Prozedur:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
i, j, l, k, xm, ym : Integer;
begin
for j:=0 to image3.Height-1 do begin
for i:=1 to image3.width-1 do begin
if(image3.Canvas.pixels[i,j]-image3.Canvas.pixels[i-1,j]>10) then break;
P1:=i;
end;
end;
for k:=image3.width-1 to 0 do begin
for l:=image3.Height-2 to 0 do begin
if(image3.Canvas.pixels[k,l]-image3.Canvas.pixels[k,l+1]>10) then break;
P2 := l;
end;
end;
for l:=image3.Height-1 to 0 do begin
for k:=image3.width-2 to 0 do begin
if(image3.Canvas.pixels[k,l]-image3.Canvas.pixels[k+1,l]>10) then break;
P3 := k;
end;
end;
for i:=0 to image3.width-1 do begin
for j:=1 to image3.Height-1 do begin
if(image3.Canvas.pixels[i,j]-image3.Canvas.pixels[i,j-1]>10) then break;
P4 := j;
end;
end;
xm := round((P3-P1)/2);
ym := round((P4-P2)/2);
end;
So habe ich den Mittelpunkt bestimmt. Nun sage ich zusätzlich in dieser Prozedur:
roter_kreis(xm, ym, 15, 40);
und die Prozedur für den Kreis habe ich aus älteren Aufgaben übernommen und wie folgt aufgebaut:
Delphi-Quellcode:
procedure roter_Kreis(xm, ym, r, anzahl : integer);
var
gesamtwinkel , winkelschritt : real;
i, x, y : Integer;
begin
winkelschritt := (4*PI)/80;
gesamtwinkel := 0;
Image1.Canvas.PenColor := clRed;
Image1.Canvas.MoveTo(xm,ym);
For i := 1 To anzahl do begin
gesamtwinkel := gesamtwinkel+winkelschritt;
x := round(cos(gesamtwinkel) * r);
y := round(sin(gesamtwinkel) * r);
Image1.Canvas.LineTo(x,y);
end;
end;
Wenn ich nun das Programm starten will, sagt er aber "roor: Identifier not found 'Image1'" ...
Wieso kann er jetzt nicht mehr auf das Image 1 zugreifen? Hat er die Verknüpfung verlohren???
Delphi-Quellcode:
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Image1: TImage;
Image2: TImage;
Image3: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure roter_Kreis(xm, ym, r, anzahl : integer);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
P1, P2, P3, P4 : Integer;
Da hagt es jetzt bei mir ... vermutlich sehe ich auch den Wald vor lauter Bäumen nicht mehr ...