Здравствуйте, друзья прошу помощи, возможно тема моя не "в тему" , но я на вашем форуме давненько и знаю , что тут много понимающих людей.
Суть вопроса вот в чем, есть несколько функций и процедур на 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;