Co robie nie tak z wątkiem ??

0

Ma pewien problem z wątkiem.

W normalnym wywołaniu moja procedura działa bez problemu. Moze znajdzie ktos jakis blad.

Ogolnie chodzi o to, zeby wyciagnac obraz z listy "listaAVI1" i porownac kazdy pixel z tego obrazu z obrazem testowy - w moim przypadku z pierwszym obrazem na tej liscie. Nowy obraz ma wstawic do nowej listy. Niestety wstawia mi puste obrazy, lub losowo jakis i nie mam pojecia skad on go wzial.


Procedure TMojWatek.Postep;
begin
  Form1.Gauge1.Progress:=trunc((i*100)/(z));
end;

Procedure TMojWatek.Modyfikacja;
begin
  Form1.ListBox1.Items.AddObject('Segmentacja ' + IntToStr(i), wynik);
end;

procedure TMojWatek.Wstaw_tlo;
begin
  Form1.ListBox1.Items.AddObject('Obraz tla',tlo);
end;

procedure TMojWatek.Execute;
var
  kolor1, kolor2 : real;
  kolor_2 : TColor;
begin
  FreeOnTerminate:=True;
  Form1.ListBox1.Clear;
  k:=Form1.listaavi1.Count;
  tlo:=TBitmap(Form1.listaAVI1.Items.Objects[0]);
  Synchronize(Wstaw_tlo);
  z:=liczba;
  For i:=1 to z do
  begin
    temp:=TBitmap(Form1.listaAVI1.Items.Objects[i]);
    wynik:=temp;
    for x:=0 to a_s do
    begin
      for y:=0 to a_w do
      begin
        kolor_2:=temp.Canvas.Pixels[x,y];
        kolor1:=0.299*Getrvalue(kolor_2)+0.587*Getgvalue(kolor_2)+0.114*Getbvalue(kolor_2);
        kolor_2:=tlo.Canvas.Pixels[x,y];
        kolor2:=0.299*Getrvalue(kolor_2)+0.587*Getgvalue(kolor_2)+0.114*Getbvalue(kolor_2);
        if (abs(kolor1-kolor2)<(dokladnosc)) then
        begin
          wynik.Canvas.Pixels[x,y]:=rgb(0,255,0);
        end
      end;
    end;
    Synchronize(Modyfikacja);
    Synchronize(Postep);
  end;
end;

Czy zmienne globalne sa przez watek normalnie widziane ??

Z gory dziekuje za jakkakolwiek pomoc.

0
  1. poczytaj co to debuger. postaw kilka breakpointów i posprawdzaj co gdzie masz
  2. zamiast globalnych stosuj zmienne klasy
  3. jak tu Form1.listaAVI1.Items wstawiasz bitmapy
  4. poczytaj o ScanLine

1 użytkowników online, w tym zalogowanych: 0, gości: 1