Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

А вы не могли бы мне подсказать как сравнить по пикселам два ч/б   Найти похожие ветки 

 
DoktorX   (2006-11-14 23:13) [0]

А вы не могли бы мне подсказать как сравнить по пикселам два ч/б битмапа
рамерностью 30Х30 пикселов?


 
Джо ©   (2006-11-14 23:13) [1]

Думаю, могли бы. А в чем загвоздка?


 
DoktorX   (2006-11-14 23:15) [2]

Я чото сделал но оно не работает!

procedure TForm1.Button3Click(Sender: TObject);

var
Count,x,y,i,Result,chislo:integer;

bm:TBitmap;
begin
 for i:=0 to 5 do
 begin
bm:=TBitmap.Create;
ImageList1.GetBitmap(i,bm);
Image4.Picture.Bitmap:=bm;
Count := 0;
for x := 0 to Width-1 do
for y := 0 to Height-1 do
 if (Image3.Canvas.Pixels[x,y] = clblack) and (Image4.Canvas.Pixels[x,y] = clblack)
 then Inc(Count);
Result:=(Count div 10);
if (Result >20)
then
chislo:= i;
label4.Caption:= inttostr(chislo);
end;
bm.Free;
end;


 
Johnmen ©   (2006-11-14 23:16) [3]

ImageX.Canvas.Pixels[X,Y] <> ImageY.Canvas.Pixels[X,Y]

Это последний раз. Учи матчасть.


 
Johnmen ©   (2006-11-14 23:17) [4]


> но оно не работает!


С чего ты взял?


 
DoktorX   (2006-11-14 23:18) [5]

а как с imagelist перебрать бм и сравнить?


 
MikePetrichenko ©   (2006-11-14 23:20) [6]


> Я чото сделал но оно не работает!

Сначала определись ЧТО сделал.


 
Johnmen ©   (2006-11-14 23:23) [7]


> а как с imagelist перебрать бм и сравнить?


Здесь дело такое, что на вопросы типа "дайте сырцов" отвечать не принято.


 
Anatoly Podgoretsky ©   (2006-11-14 23:24) [8]


> С чего ты взял?

По вопросу работает, а по приведеным им коду не работает, поскольку вопрос к коду отношения не имеет, в коде он считает количество совпадающих черных точек


 
DoktorX   (2006-11-14 23:28) [9]

так мне и надо по кол совпавших чёрных точек отобразить наилучший шаблон


 
Anatoly Podgoretsky ©   (2006-11-14 23:29) [10]

> DoktorX  (14.11.2006 23:28:09)  [9]

А теперь внимательно прочитай вопрос, и подумай о наших телепатических способностях


 
Johnmen ©   (2006-11-14 23:34) [11]

Кстати, в [2] ещё и утечки будут. Т.к. Free не там.


 
Ketmar ©   (2006-11-14 23:43) [12]

опять он...


 
DoktorX   (2006-11-14 23:56) [13]

Удалено модератором


 
DoktorX   (2006-11-15 00:09) [14]

вы мне не отказываетесь помочь? какие же вы спецы??????


 
Anatoly Podgoretsky ©   (2006-11-15 00:13) [15]

Напрашиваешься, а у нас в этом случае не церемонятся.


 
Johnmen ©   (2006-11-15 00:14) [16]


> вы мне не отказываетесь помочь? какие же вы спецы??????


Как можно помочь, если ты не отвечаешь на уточняющие вопросы?
А спецы мы самые спецовые из всех спецов.


 
DoktorX   (2006-11-15 00:16) [17]

задайте мне вопрос


 
Johnmen ©   (2006-11-15 00:18) [18]


> задайте мне вопрос


Пожалуйста - [4]


 
Anatoly Podgoretsky ©   (2006-11-15 00:18) [19]

> DoktorX  (15.11.2006 0:16:17)  [17]

Может тебе и пальцы загибать


 
DoktorX   (2006-11-15 00:19) [20]

(Image4.Canvas.Pixels[x,y] = clblack)
а если вместо етого поставить
(bm[i].Canvas.Pixels[x,y] = clblack)


 
MikePetrichenko ©   (2006-11-15 00:22) [21]


> Может тебе и пальцы загибать

Агаа!


 
Anatoly Podgoretsky ©   (2006-11-15 00:27) [22]

> MikePetrichenko  (15.11.2006 0:22:21)  [21]

Приятно встретить знающего человека


 
RASkov   (2006-11-15 03:54) [23]

> for x := 0 to Width-1 do
> for y := 0 to Height-1 do

У тебя здесь все верно? точно?
Вставь перед ними:
ShowMessage(IntToStr(Width)+" - "+IntToStr(Image4.Picture.Bitmap.Width));

>Image4.Picture.Bitmap:=bm;
Лучше так Image4.Picture.Bitmap.Assign(bm);


 
RASkov   (2006-11-15 04:11) [24]

А по твоему приведенному "куску кода" можно и так сделать
ImageList1.GetBitmap(i, Image4.Picture.Bitmap);
А то у тебя i раз создается bm, а уничтожается один раз. Т.е. bm тебе вообще не надо.
Или один раз создай bm до циклов и нафик не нужен Image4. После циклов finally bm.Free;


 
Johnmen ©   (2006-11-15 09:55) [25]


> RASkov   (15.11.06 04:11) [24]


Не стОит давать бредовые советы и вводить людей в заблуждение.


 
RASkov   (2006-11-15 12:37) [26]

> [25] Johnmen ©   (15.11.06 09:55)
>и вводить людей в заблуждение.

Так на оборот же хочу чела вывести из него. В чем бред? У него идет перебор всех картинок из ImigaList и далее приравнивание к Image4 который в свою очередь попиксельно сравнивается с Image3. Т.е. здесь получается промежуточный Image4 и ненужен вовсе.


 
RASkov   (2006-11-15 12:38) [27]

или не нужен временный битмап


 
RASkov   (2006-11-15 13:17) [28]

> Автор, попробуй так и сделай выводы, я просто чуть-чуть подправил твой код, на самом деле здесь много чего переделать можно.
procedure TForm1.Button3Click(Sender: TObject);
var
Count, x, y, i, Result, chislo: Integer;
begin
chislo:= -1;
for i:=0 to ImageList1.Count-1 do begin
 ImageList1.GetBitmap(i, Image4.Picture.Bitmap);
 Count := 0;
 for x := 0 to Image4.Picture.Bitmap.Width-1 do
  for y := 0 to Image4.Picture.Bitmap.Height-1 do begin
   if (Image3.Canvas.Pixels[x,y] = clblack) and (Image4.Canvas.Pixels[x,y] = clblack)
    then Inc(Count);
   Result:=(Count div 10);
   if (Result > 20) then chislo:= i;
  end;
* Image4.Repaint;
 Label4.Caption:= inttostr(chislo);
* Application.ProcessMessages;
end;
end;


* - можно убрать. (быстрее будет)
ЗЫ chislo всегда будет нарастающим(я думаю смысл понятен) Вместо временного битмапа лучше временно хранить Result максимальный.



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.067 c
1-1161688783
SlavaK
2006-10-24 15:19
2006.12.03
Делал ли кто подобный компонент или просто класс


2-1163538426
kaver
2006-11-15 00:07
2006.12.03
TPanel и компоненты


5-1144833618
Святослав
2006-04-12 13:20
2006.12.03
Нужен специфический компонент


15-1163485995
alex_drob
2006-11-14 09:33
2006.12.03
Лицензионный WinXP и новый HDD


11-1140042552
alex_s
2006-02-16 01:29
2006.12.03
FB/IB