Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Вниз

сравнение двух картинок 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1225045728
P_na
2008-10-26 21:28
2008.12.07
Проблемы с запросом


2-1225311444
deras
2008-10-29 23:17
2008.12.07
Как "остановить" цикл?


15-1223149610
Внук
2008-10-04 23:46
2008.12.07
Хоть и не пятница


2-1224864344
Dark
2008-10-24 20:05
2008.12.07
Xls2Html


8-1188236379
Dmitry_12_08_73
2007-08-27 21:39
2008.12.07
Считать время с FTP-сервера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский