Форум: "Начинающим";
Текущий архив: 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.009 c