Форум: "Начинающим";
Текущий архив: 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