Показать сообщение отдельно
  #9  
Старый 24.04.2013, 14:22
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

C TBitmap тоже не работает(((, Если не в потоке, а просто процедурой то все ок, а в потоке не в какую ПОЧЕМУ!!!! ИзвИните имоции...
Садись, два

Код:
...
    type
  TCapth = class(TThread)
  protected
  procedure Execute; override;
  end;

...
  ImageSrav:array [3..53] of TBitmap;

...
for I := 3 to 52 do
 begin
 ImageSrav[i]:=TBitmap.Create;
 ImageSrav[i]:=TImage(Form1.FindComponent('Image'+IntToStr(i))).Picture.Bitmap;
 end;
...


procedure TCapth.execute;
var
i,x,y,l,j,iz:integer;
s:integer;
stop:Boolean;
cap:String;
proz,posx,posy,all:Integer;
begin
  inherited;
   cap:='';
 for posx := 3 to 77 do begin
 for posy := 3 to 15 do begin
 s:=0;
 iz:=2;

 repeat
    iz:=iz+1;
    all:=0;
    s:=0;
    proz:=0;
 x:=ImageSrav[iz].Width-1;
 y:=ImageSrav[iz].Height-1;
 for l := 0 to x do begin
 for j := 0 to y do begin

if ImageSrav[iz].Canvas.Pixels[l,j]<>RGB(255,255,255) then begin
  all:=all+1;
 end;

 end;
 end;

 for l := 0 to x do begin
 for j := 0 to y do begin
if (ImageSrav[iz].Canvas.Pixels[l,j]=ImageSrav[53].Canvas.Pixels[l+posx,j+posy]) and
   (ImageSrav[iz].Canvas.Pixels[l,j]<>RGB(255,255,255)) then
begin
s:=s+1;
end;
 end;
 end;
 proz:=round(s/all*100);

  if proz>60 then begin
  case iz of
  3..7:cap:=cap+'0';
  8..12:cap:=cap+'1';
  13..17:cap:=cap+'2';
  18..22:cap:=cap+'3';
  23..27:cap:=cap+'4';
  28..32:cap:=cap+'5';
  33..37:cap:=cap+'6';
  38..42:cap:=cap+'7';
  43..47:cap:=cap+'8';
  48..52:cap:=cap+'9';
  end;
  end;

     until iz=52;
 end;
 end;

   Form1.sEdit2.Text:=cap;
end;
Ответить с цитированием