![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Вот код, если он как обычная процедура то работает, если как поток то не работает!!! Нужен поток не люблю когда что нибудь тормозит!!!
Код:
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:=3;
repeat
iz:=iz+1;
all:=0;
s:=0;
proz:=0;
x:=TImage(Form1.FindComponent('Image'+IntToStr(iz))).Width-1;
y:=TImage(Form1.FindComponent('Image'+IntToStr(iz))).Height-1;
for l := 0 to x do begin
for j := 0 to y do begin
if (TImage(Form1.FindComponent('Image'+IntToStr(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 (TImage(Form1.FindComponent('Image'+IntToStr(iz))).Canvas.Pixels[l,j]=Form1.image2.Canvas.Pixels[l+posx,j+posy])
and (TImage(Form1.FindComponent('Image'+IntToStr(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;Последний раз редактировалось ProDaNTe, 24.04.2013 в 07:41. |
|
#2
|
||||
|
||||
|
Цитата:
З.Ы. И пжлст, отформатируйте код на предмет переноса строк в рамках редактора, а то на экране он расползается за его пределы, а это не красиво. Последний раз редактировалось Alegun, 23.04.2013 в 22:37. |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
ProDaNTe (24.04.2013)
| ||
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Зачем с файла если оно и так уже в имидж загружено. Динамически создать, затем присвоить imageN.Picture:= image1.Picture а дальше как обычно, быстрее не будет, просто из потока не желательно к статике обращаться, может быть пересечение с другим/основным потоком, что чревато непредсказуемостью.
Оффтоп: З.Ы. Ещё раз прошу нижайше, пжлст, нажав на правку около первого поста, в районе 34й строки кода не соблаговолите ли вы, млстлвгсдр , где-то около оператора and жимануть на ентер чтоб строчку разбить, ну правда, не красиво. |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
ProDaNTe (24.04.2013)
| ||
|
#5
|
|||
|
|||
|
Цитата:
Цитата:
Спасибо заранее, хочется разобраться раз и на всегда!!! Делаю так при создании формы Код:
for I := 3 to 52 do
begin
ImageSrav[i]:=Timage.Create(Form1);
ImageSrav[i].Parent:=Form1;
ImageSrav[i].AutoSize:=true;
ImageSrav[i].Visible:=false;
ImageSrav[i].Picture:=TImage(Form1.FindComponent('Image'+IntToStr(i))).Picture;
ImageSrav[i].Left:=TImage(Form1.FindComponent('Image'+IntToStr(i))).Left+200;
ImageSrav[i].top:=TImage(Form1.FindComponent('Image'+IntToStr(i))).top;
end;Последний раз редактировалось ProDaNTe, 24.04.2013 в 10:32. |
|
#6
|
||||
|
||||
|
Цитата:
Объявление потомка от TThread Код:
...
type
TCapth = class(TThread)
private
MyImage: TImage;
protected
procedure Execute; override; // Выполняется в потоке
procedure ShowResult; // Выводная процедура из потока
// Если в основной поток нужно вернуть разные рисунки, то тогда
// ShowResult задаётся с параметрами
// procedure ShowResult(img: TImage);
end;
...Picture:= Picture это всёравно что a:= b, т.е. передается лишь копия изображения, его Canvas.Pixels не зависят от оригинала и делай с ним что хошь... Код:
procedure TCapth.Execute;
begin
MyImage.Picture:= Form1.Image1{iz} .Picture;
x:= MyImage.Width -1;
y:= MyImage.Height-1;
...
// ну и так далее
...
end;Код:
... Synchronize(ShowResult); ... А вот и сама выводная процедура Код:
...
procedure TCapth.ShowResult;
begin
...
// напр.
Form1.Image1{iz}.Picture:= MyImage.Picture;
...
end;
...Из всего этого такое заключение - с потоками надо правильно обращаться и тогда всё будет работать. |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
ProDaNTe (24.04.2013)
| ||