![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сравнение двух картинок TImage [D7, XP]
worldmen © (2008-10-27 11:18:00)Какие свойства использовать TImage, чтоб сравнить 2-е картинки - одинаковые они они или нет?
worldmen (2008-10-27 15:51:00) [1]Понял. Надо было поставить
Bmp1.PixelFormat := pf24Bit;
....
Bmp2.PixelFormat := pf24Bit;
Теперь, пооже работает правильно.
clickmaker (2008-10-27 15:38:00) [2]> как проверять 24-ти и 32-х битные?
а с ними-то какие проблемы? true color, палитры нет, каждый байт (вернее триада RGB) соответствует реальному цвету
worldmen (2008-10-27 15:31:00) [3]Я понял: TByteArray используется для pf1bit-ным картинкам, а как проверять 24-ти и 32-х битные?
worldmen (2008-10-27 15:25:00) [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%
что делаю не так?
Правильный$Вася (2008-10-27 13:06:00) [5]проще сохранить оба в файл одинакового формата и сделать команду FC
brother (2008-10-27 11:21:00) [6]image1.Picture.Bitmap.ScanLine
brother (2008-10-27 11:18:00) [7]scanline?