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

Вниз

Сравнинеи двух image.   Найти похожие ветки 

 
pavelkq   (2009-01-15 14:40) [0]

Пишу функцияю сравнения по первому квардатику 10х10 пикселей.
function TOKBottomDlg1.compare :boolean;
var x,y: integer;
begin
result:=true;
for x:=0 to 10 do
 for y:=0 to 10 do
   if Image2.Canvas.Pixels[x,y]<>Image3.Canvas.Pixels[x,y] then
     begin
       result:=false;
     end;
end;

Иногда работает на ура, а иногда уже со второй строки идут сильные несовпадения, хотя рисунки совершенно одинаковые.
В чем тут проблема? Есть ли другие, быстрые методы сравнения рисунков типа if image1=image2 ?


 
Б   (2009-01-15 15:27) [1]

> Быстрые методы сравнения рисунков типа if image1=image2?

Конечно же есть. Зайди в FAQ ---> Графика.


 if Image2.Canvas.Pixels[x,y]<>Image3.Canvas.Pixels[x,y] then
    begin
       result:=false;
    end;


Ну и зачем дальше делать сравнение? Если мы уже знаем, что рисунки не одинаковы, то разумней было бы сразу же выйти из функции.

//==========================================================
Месяц сам такую написал. Нужно для игры.


 
{RASkov} ©   (2009-01-15 15:29) [2]

> [0] pavelkq   (15.01.09 14:40)
> хотя рисунки совершенно одинаковые.

Точно? Или только визуально, а на самом деле один битмап а другой - с него сделанный джепег....
Оттенков цвета сам понимаешь, полно.... тебе видно одинаково, а "компу" по разному все...


 
Б   (2009-01-15 15:35) [3]

Можешь для проверки сделать следующее.
В Painte залей растр, к примеру жёлтым цветом, сохрани. Потом нарисуй маленькую точку другим оттенком тоже жёлтого. Визуально кажется, что картинки одинаковы, а на самом деле совсем иначе.


 
Правильный$Вася   (2009-01-15 15:36) [4]


> рисунки совершенно одинаковые

палитра, глубина цвета, формат?


 
Б   (2009-01-15 15:36) [5]

> Месяц сам такую написал. Нужно для игры.
Имеется в виду месяц назад.


 
pavelkq   (2009-01-15 15:53) [6]

Я не силен в обращении к памяти, но по логике, эти оба рисунка лежат в памяти. Нужно сначала найти качало каждой области, а потом сравнить побайтно всю длинну! Как это можно реализовать?


 
pavelkq   (2009-01-15 16:00) [7]

Эти рисунки точно одинаковые. Просто один из них хранится в БД и грузится оттуда, а второй открывается через буфер обмена. Надо установить, есть ли в базе такой рисунок или нет.
Один назначаю из буфера обмена:
image.Picture.Bitmap.Assign(Clipboard)
А другой из базы:
BS:= TADOBlobStream.Create(TBlobField(DBGrid1.Fields[3]), bmRead);
BS.Seek(0, soFromBeginning);
bmp:=TBitmap.create;
bmp.LoadFromStream(BS);
Image3.Picture.Bitmap.Assign(bmp);


 
Pavelkq   (2009-01-15 18:31) [8]

А где в факах? Я покопал, не нашел :-(

> Б
можно кусок кода представить?


 
Б   (2009-01-15 19:02) [9]

> Эти рисунки точно одинаковые.
А вдруг нет?
Нарисуй в Paint и проверь. Или учти слова Правильного Васи.

> А где в факах? Я покопал, не нашел :-(

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988625229&n=21

> можно кусок кода представить?

Делаешь то же самое только при помощи ScanLine -
работает очень быстро, по сравнению со свойством канвы Pixels.


 
Pavelkq   (2009-01-15 19:22) [10]

Хм, меня терзают смутные сомнения, что при первом обращении картинка рисуется нормально и сравнивается. А второй раз она рисуется поверх первой, а сравнение битов идет где-то из под низу.
Ну, точно! Перед тем, как назначить новую картинку из базы ее надо зачистить. Теперь все заработало.
Всем спасибо! Тема закрыта.



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1230995201
абдирофф
2009-01-03 18:06
2009.03.01
помогите разобратся с ошибками при компилировании программы


15-1230419786
Rubin
2008-12-28 02:16
2009.03.01
Подскажите где найти пример "управления рабочим столом"


15-1230313536
DillerXX
2008-12-26 20:45
2009.03.01
Пожалуйста, помогите пройти квест


8-1191219508
DDDeN
2007-10-01 10:18
2009.03.01
Перехват звука с Stereo Out


2-1232114477
n00b
2009-01-16 17:01
2009.03.01
помогите с переводом с С++ на делфи