Главная страница
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.016 c
2-1225186805
dmitry_12_08_73
2008-10-28 12:40
2008.12.07
Скрытие пиктограммы программы в таскбаре


6-1196058046
Alex_C
2007-11-26 09:20
2008.12.07
Немогу соединиться с SNTP сервером


15-1222928133
РВА
2008-10-02 10:15
2008.12.07
Интернет для дома


15-1223228797
dr_creigan
2008-10-05 21:46
2008.12.07
активация делфы


2-1225277295
garik_
2008-10-29 13:48
2008.12.07
Наследование