Главная страница
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.01 c
2-1224830949
AlekseyB
2008-10-24 10:49
2008.12.07
Как загрузить файл в ListBox ???


2-1225189464
Armond
2008-10-28 13:24
2008.12.07
Сравнение файлов


15-1223172127
axd
2008-10-05 06:02
2008.12.07
MySQL работает не так как надо


2-1224966934
Kolan
2008-10-26 00:35
2008.12.07
Однообразная работа с TComboBox и TListBox.


1-1203018747
Shart
2008-02-14 22:52
2008.12.07
Максимумы в гистограмме