Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.07;
Скачать: CL | DM;

Вниз

сравнение двух картинок TImage   Найти похожие ветки 

 
worldmen   (2008-10-27 11:18) [0]

Какие свойства использовать TImage, чтоб сравнить 2-е картинки - одинаковые они они или нет?


 
brother ©   (2008-10-27 11:18) [1]

scanline?


 
brother ©   (2008-10-27 11:21) [2]

image1.Picture.Bitmap.ScanLine


 
Правильный$Вася   (2008-10-27 13:06) [3]

проще сохранить оба в файл одинакового формата и сделать команду FC


 
worldmen   (2008-10-27 15:25) [4]

Мне надо сравнивать скриншоты. Я делаю так:

var
  bmp1 :TBitmap;
  bmp2 :TBitmap;
.....
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 x,y, h,w : integer;
begin
   ...
   bmp1 := TBitmap.Create;
   bmp1.Width := w; //Screen.Width;
   bmp1.Height := h; //Screen.Height;
   StretchBlt(bmp1.Canvas.Handle,0,0, w,h, GetDC(0),x,y, w,h, SRCCOPY);

   Image1.Width := w; // Screen.Width;
   Image1.Height:= h; // Screen.Height;
   Image1.Picture.Assign(bmp1);
   //bmp1.Free;
end;

Таких две процедуры - делают две картинки (для Image1 и Image2).
Потом я их сравниваю:

var i,j :integer;
   P1,P2 : PByteArray;
   yes, no : integer;
   T1, T2 :TTime;
begin
   T1:=Now;
   yes:=0; no:=0;
   for i:=0 to Bmp1.Width-1 do
   begin
     Label10.Caption:="I="+IntToStr(i);
     P1 := Bmp1.ScanLine[i];
     P2 := Bmp2.ScanLine[i];
     for j := 0 to Bmp1.Height-1 do
     begin
       Label11.Caption:="J="+IntToStr(J);
       if P1[j] = P2[j] then  inc(yes)
       else inc(no);
     end;
   end;
   Label9.Caption:= "Одинаковых="+IntToStr(yes)+". Не одинаковых="+IntToStr(no);

Если, например, взять картинку 50х50 пиксел - переменная Yes показывает совпадение всех 2500 пиксель даже если треть картинки другая.
Если больше половины картинки изменилось - то показывает изменилось 25%
что делаю не так?


 
worldmen   (2008-10-27 15:31) [5]

Я понял: TByteArray используется для  pf1bit-ным картинкам, а как проверять 24-ти и 32-х битные?


 
clickmaker ©   (2008-10-27 15:38) [6]

> как проверять 24-ти и 32-х битные?

а с ними-то какие проблемы? true color, палитры нет, каждый байт (вернее триада RGB) соответствует реальному цвету


 
worldmen   (2008-10-27 15:51) [7]

Понял. Надо было поставить

Bmp1.PixelFormat := pf24Bit;
....
Bmp2.PixelFormat := pf24Bit;

Теперь, пооже работает правильно.



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

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

Наверх




Память: 0.48 MB
Время: 0.015 c
15-1223008024
KSergey
2008-10-03 08:27
2008.12.07
Истерия "мирового кризиса"


15-1223291688
TNT
2008-10-06 15:14
2008.12.07
Запрос - Данные из одной таблицы , совместить как из разных табли


6-1195957359
ZzZzZzZ
2007-11-25 05:22
2008.12.07
отправка принятых данных =)) (TClientSocket & TServerSocket)


2-1225089482
Vitaliy_____
2008-10-27 09:38
2008.12.07
Списки. Сортировка.


3-1210766792
MishaLuk
2008-05-14 16:06
2008.12.07
убрать монопольный доступ