Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.11.2013, 05:44
ryzveld ryzveld вне форума
Прохожий
 
Регистрация: 27.10.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
Сообщение Поиск изображения (цветовые каналы)

Программа "бот косынка" делает скриншот экрана, затем ищет в нем образец.
Находит на отлично, но бывает подводит... причина: в цветовых каналах, на глаз человека абсолютно одинаковые изображения.

Как то возможно сделать одинаковыми изображения и для программы??? (пытался играть с тоном, но увы...)



Код:
 //код поиска скачен с иходников
var
  buf1, buf2: TBuf;

procedure LoagIMG(var buffer: TBuf; img: TImage; Name: String);
var
  x,y,c: integer;
  p: pByteArray;
begin
  img.Picture.LoadFromFile(Name);
  img.Picture.Bitmap.PixelFormat:=pf24bit; // pf8Bit;
  x:=0; y:=0; x:=0;
  SetLength(buffer, img.Height, img.Width);
  for y:=0 to img.Height-1 do begin
    p:=img.Picture.Bitmap.ScanLine[y];
    for x:=0 to img.Width-1 do begin
      c:=((p[x*3+0] shl 8+p[x*3+1]) shl 8)+p[x*3+2];
      buffer[y,x]:=c;
    end;
  end;
end;

function TForm1.CompareIMG: FRes;
var
  y, x, yy, xx: integer;
begin
  y:=0;
  repeat
    x:=0;
    repeat
      Result.found:=true;
      yy:=0;
      repeat
        xx:=0;
        repeat
          if buf1[y+yy, x+xx]<>buf2[yy,xx] then Result.found:=false;
          inc(xx);
        until (xx>=Image2.Width) or (Not Result.found);
        inc(yy);
      until (yy>=Image2.Height) or (Not Result.found);
      inc(x);
    until (x>Image1.Width-Image2.Width) or (Result.found);
    inc(y);
  until (y>Image1.Height-Image2.Height) or (Result.found);
  if Result.found then begin
    Result.x:=x-1;
    Result.y:=y-1;
  end;
end;

// Пример использования:
type
  FRes = record
    found: boolean;
    x,y: integer;
  end;

var
  FindResult: FRes;

begin
    LoagIMG(buf1,Image1 ,'C:\Bot\Screen.bmp');
    LoagIMG(buf2, Image2, 'C:\Bot\AB.bmp');
    FindResult:=CompareIMG;
    if FindResult.found then ShowMessage('Нашел');
end;

Последний раз редактировалось ryzveld, 05.11.2013 в 06:14.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter