Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.03.01;
Скачать: [xml.tar.bz2];

Вниз

Сравнинеи двух 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
15-1230567777
Petr V. Abramov
2008-12-29 19:22
2009.03.01
А кто такие сервитуты?


2-1232132953
programmer90
2009-01-16 22:09
2009.03.01
Ссылка...


15-1231190566
Банког
2009-01-06 00:22
2009.03.01
Параллельные алгоритмы?


2-1232135717
programmer90
2009-01-16 22:55
2009.03.01
Вопрос по ShellExecute


8-1190721566
Jimmy
2007-09-25 15:59
2009.03.01
Ссылка на учебник по векторной графике





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский