Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > помогите перевести код из Делфи и Бидер


Автор: prostik 26.4.2007, 15:09
Ситуация была такая - есть скриншот экрана (Картинка1), и маленькая картинка например 20 на 20 пикс (Картинка2), как можно быстро определить, что на Картинке1 есть Картинка2....
так вот коечо сделал,но как это сделать чтоб в билдере работала,можете помочь перевести)


function CompareImages(A, B : TBitmap): Boolean;
var
  i, j : integer;
  p1, p2 : PARGB;
begin
  Result:=False;

  for i := 0 to A.Height - 1 do begin
    p1 := A.ScanLine[i];
    p2 := B.ScanLine[i];
    for j := 0 to A.Width - 1 do begin
      if not ((p1[j].r = p2[j].r) and (p1[j].g = p2[j].g) and (p1[j].b = p2[j].b)) then exit;
    end;
  end;

  Result := True;
end;

function SearchImage(A, B : TBitmap): Boolean;
var
  x, y: Integer;
  Rect1, Rect2: TRect;
  C: TBitmap;
begin
  Result := True;

  try
    C :=  TBitmap.Create;
    C.Assign(B);

    Rect1.Left := 0;
    Rect1.Top := 0;
    Rect1.Right := B.Width - 1;
    Rect1.Bottom := B.Height - 1;

    for y := 0 to A.Height - B.Height do
      for x := 0 to A.Width - B.Width do begin

         Rect2.Left := x;
         Rect2.Top := y;
         Rect2.Right := B.Width - 1 + x;
         Rect2.Bottom := B.Height - 1 + y;

         C.Canvas.CopyRect(Rect1, A.Canvas, Rect2);

         if CompareImages(B, C) then Exit;
      end;

    Result := False;

  finally
    C.Free;
  end;
end;

Автор: JAnty 26.4.2007, 16:47
Если б Вы хорошо знали С++, то это не составило бы труда.
Вот например начало:
Код

bool CompareImages(TBitmap A,  TBitmap B)
{
   int i, j;
   PARGB p1, p2;
   bool Result = false; // возвращать значение методом ''return Result;''
//...
 return Result;
}

 Всё почти одинаково...

Автор: SenkraD 26.4.2007, 16:51
JAnty,  а в каком хедере лежит PARGB

Автор: JAnty 26.4.2007, 16:53
А это уже не мои проблемы...  smile

Добавлено через 1 минуту и 9 секунд
Пуст будет RGB или это его собственный тип может...

Добавлено через 2 минуты и 42 секунды
Хотя не, RGB это не тип данных вродебы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)