Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.028 c
1-1161766957
rif
2006-10-25 13:02
2006.12.03
Выпадение приложения


15-1163618211
Суслик
2006-11-15 22:16
2006.12.03
Книги по Apache, PHP и MySQL


6-1152017480
Интересующийся
2006-07-04 16:51
2006.12.03
Проблемы c TIdTCPServer и TIdTCPClient


2-1163846665
Youngkoder
2006-11-18 13:44
2006.12.03
TStrings


15-1163079164
Access
2006-11-09 16:32
2006.12.03
Восстановить "опции" explore.exe в реестре




   Наверх