Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: 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 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.038 c
1-1131631572
Суслик
2005-11-10 17:06
2005.12.11
Вопрос про warning


1-1131793569
<PREDATOR>
2005-11-12 14:06
2005.12.11
Как запустить прогу из командной строки


14-1132637157
DelphiN!
2005-11-22 08:25
2005.12.11
Отоброжение смежных ячеек


3-1130322965
MakNik
2005-10-26 14:36
2005.12.11
Количесво дней в месяце


2-1132694527
Бандерас
2005-11-23 00:22
2005.12.11
Вставка из буфера обмена только один раз ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский