Porownywanie bitmap

0

Czesc wszystkim...

Mam dwie bitmapy (TBitmap) zawierajaca dwa obrazy o <ort>tymsamym </ort>rozmiarz. Jak sprawrzic czy zawieraja ten sam obraz. Wymyslilem juz wiele sposobow ale sa zawolne. Procedura musi sie powtarzac wielerazy w ciagu sekundy. <ort>Morze </ort>ktos zna najszybszy sposob.

0

a próbowałeś zrobić coś takiego :

  1. porównujesz wymiary
    jeśli równe to
  2. porównujesz rozmiar (kb)
    jeśli równe to
  3. While (rozne=false) and (ilosc_losowan<max_losowan) do
    (1) losujesz x y
    (2) porównujesz pixel[x,y] obu bitmap >>> if różne then rozne:=true
    else inc(ilosc_losowan);

wprawdzie skuteczności stuprocentowej to nie ma ale na pewno zbliżoną a do tego zdecydowanie szybsze niż porównywanie dwóch całych bmp pixel po pixelu

0

Zawsze można użyć ScanLine albo zapisać dwie bitmapy do strumienii i potem porównywać.

0

Bitmapy sa <ort>tychsamych </ort>wymiarow i rozmiarow.

Porownywanie pixli jest ort!, zapisywanie do strumienia tez wolne. Ale ScanLine nie <ort>prubowalem </ort>- jak to dziala?

// TY! TY myślisz, że po co ja się staram i te ort! wstawiam? Popraw ale juz te byki!!! - Q

0
  1. adi_anabel popraw orty ;)
  2. try
function Porownaj(Image1, Image2: TImage) : integer;
var x, y: integer;
  liczba: LongInt;
  punkt1, punkt2: PByteArray;
  procent: double;
const max_roznica=5;

begin
  liczba:=0;
  for y:=0 to image1.Picture.Bitmap.height-1 do begin
    punkt1:=image1.Picture.Bitmap.scanline[y];
    punkt2:=image2.Picture.Bitmap.scanline[y];
    for x:=0 to image1.Picture.Bitmap.width-1 do
      if abs(punkt1[x]-punkt2[x])>max_roznica then
        inc(liczba);
    if image1.Picture.Bitmap.height*image1.Picture.Bitmap.width>0 then
      procent:=100*(liczba/(image1.Picture.Bitmap.height*
      image1.Picture.Bitmap.width))
    else
      procent:=0;
    Result := 100-round(procent);
  end;
end;
Label1.Caption:= 'Rysunki podobne są do siebie w '+IntToStr(Porownaj(Image1,Image2))+' procentach';

1 użytkowników online, w tym zalogowanych: 0, gości: 1