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.heightimage1.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;


```delphi
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, botów: 0