Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с Delphi колхознику...
UoKit.com Форумы > Кликер > UO Pilot > Плагины и доп. ПО
ivanTu
Здравствуйте, друзья прошу помощи, возможно тема моя не "в тему" , но я на вашем форуме давненько и знаю , что тут много понимающих людей.
Суть вопроса вот в чем, есть несколько функций и процедур на Delphi которые дают получить один результат, а именно сравнить две картинки ,
Может можно как то их объединить в одну, или как то оптимизировать а то код получается громадный, и я не совсем понимаю, как реализовать красивый вызов, что как в uopilot получилось, к примеру
if findeimage(параметры)
то....какое то действие.

Помогите пожалуйста.

Код

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;

procedure TForm1.Button3Click(Sender: TObject);
var
  FindResult: FRes;
begin
   LoagIMG(buf1, Image1,('1.bmp'));
   LoagIMG(buf2, Image2,('2.bmp'));
   FindResult:=CompareIMG;

    if FindResult.found then begin
      ShowMessage('Есть совпадение;-)'+#10#13+'Позиция картинки по Х '+IntToStr(FindResult.x)+#10#13+'Позиция картинки по У '+IntToStr(FindResult.y));
    end else ShowMessage('Нет совпвдений!');
  end;

end.


Забыл еще одну процедуру по загрузки картинки.
Может у меня тут вообще много лишних телодвижений, я немного запутался...



Код

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;
  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;
Cockney
Код нечитабельный. Более того,он чуть более,чем полностью нерабочий. Указывать что-то конкретное нет смысла - нужно переписывать все.


Читай литературу об основных конструкциях языка.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.