Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Помогите с Delphi колхознику..., внтури
ivanTu
сообщение 24.1.2017, 13:54
Сообщение #1


****

Apprentice
Сообщений: 128
Регистрация: 2.2.2015
Группа: Пользователи
Наличность: 0
Пользователь №: 17.276
Возраст: 27



Здравствуйте, друзья прошу помощи, возможно тема моя не "в тему" , но я на вашем форуме давненько и знаю , что тут много понимающих людей.
Суть вопроса вот в чем, есть несколько функций и процедур на 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;
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 29.1.2017, 0:08
Сообщение #2


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Код нечитабельный. Более того,он чуть более,чем полностью нерабочий. Указывать что-то конкретное нет смысла - нужно переписывать все.


Читай литературу об основных конструкциях языка.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 14:08
Designed by Nickostyle