Einzelnen Beitrag anzeigen

hamptoncourt

Registriert seit: 20. Nov 2010
34 Beiträge
 
#7

AW: Bildbearbeitung - Astronomie-Aufgabe

  Alt 19. Dez 2010, 15:51
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 ...
  Mit Zitat antworten Zitat