Главная страница
    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.007 c
1-1202818070
JetuS
2008-02-12 15:07
2008.12.07
Алгоритм сравнения матриц


15-1223300201
Gahgreaph
2008-10-06 17:36
2008.12.07
Скажите по дизайну forum.delphimaster.ru


15-1222839778
ВадимЛ
2008-10-01 09:42
2008.12.07
Починить Делфи Д5 (пути ?)


3-1210917985
Dizzzel
2008-05-16 10:06
2008.12.07
Динамическое создание полей в хранимой процедуре


2-1225117209
Zhekson
2008-10-27 17:20
2008.12.07
Как запретить выделение и вставку в компоненте класса TEdit???





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