Вниз
Скачать: CL | DM;

Копирование экрана   Найти похожие ветки 

 
Dmitrich   (2005-11-12 17:51) [0]

Возник такой вопрос: Как реализовать копирование экрана и в какую переменную, чтобы потом можно было фрагмент из скопированного экрана сравнить с другим фрагментом на совпадение? Спасибо.


 
Dmitrich   (2005-11-12 18:13) [1]

Как копировать в TBitMap разобрался! А как, допустим, из картинки в TBitMap (100x100) сравнить фрагмент с координатами (10,10,20,20) с фрагментом другого BitMap? Заранее спасибо


 
TStas ©   (2005-11-12 20:22) [2]

Canvas.CopyRect+F1


 
kami ©   (2005-11-13 14:37) [3]

BitBlt - гораздо быстрее CopyRect,

Сравнение битмапов :
function TTCPParser.BitmapsEqual(var Bmp1, Bmp2: TBitmap): Boolean;
{Author  Магнитоныч(c)}
var H, H2, LineLength, y: Integer;
   DS: TDIBSection;

function EqualLine(Line: Integer): Boolean;
begin
  Result := CompareMem(@Bmp1.ScanLine[Line]^,
                       @Bmp2.ScanLine[Line]^, LineLength);
end;

begin
Result := False;
{ Сравнение базовых параметров }
if GetObject(Bmp1.Handle, SizeOf(DS), @DS) > 0
  then LineLength := DS.dsBm.bmWidthBytes
  else Exit; //error

H := Bmp1.Height - 1;
if H = 0 then
  Result := EqualLine(0)
else begin
  Result := True;
  H2 := ((H+1) div 2) - 1;

  { Сравниваем строки. Цикл проходит строки одновременно сверху
    и снизу, сходясь в центре: так больше вероятность
    скорейшего обнаружения отличающихся пикселей. }
  for y := 0 to H2 do
    if (not EqualLine(y)) or (not EqualLine(H-y)) then
    begin
      Result := False;
      Exit;
    end;

  { Если высота не кратна двум, сравниваем средние строки,
    которые пропустили в цикле. Это сделано, чтобы дважды
    не вызавать CompareMem для одной строки. }
  if (H mod 2) = 0 then
    Result := EqualLine(H2 + 1);
end;
end;


Учти, что чем больше цветность битмапов, чем меньше ширина и больше высота, тем медленнее работает.
Из оригинала убрана проверка габаритов и (кажется) цветности



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.043 c
2-1132918799
kay
2005-11-25 14:39
2005.12.11
Есть non-unicode программа, как её запустить с правильным отображ


14-1132214056
Карелин Артем
2005-11-17 10:54
2005.12.11
Определение пола автоматом.


14-1132313939
dr Tr0jan
2005-11-18 14:38
2005.12.11
Новое крепление твоего вентилятора


14-1132418718
Pazitron_Brain
2005-11-19 19:45
2005.12.11
Как оживить картириджи?


2-1132602966
Антоха
2005-11-21 22:56
2005.12.11
Наипростешая програмка




   Наверх