|
|
Регистрация | << Правила форума >> | 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)
|