Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизА вы не могли бы мне подсказать как сравнить по пикселам два ч/б Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.046 c