AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Nur prüfen ob Bilder unterschiedlich sind
Thema durchsuchen
Ansicht
Themen-Optionen

Nur prüfen ob Bilder unterschiedlich sind

Ein Thema von meisteralex · begonnen am 21. Dez 2005 · letzter Beitrag vom 22. Dez 2005
Antwort Antwort
Seite 2 von 2     12   
meisteralex

Registriert seit: 22. Nov 2005
173 Beiträge
 
#11

Re: Nur prüfen ob Bilder unterschiedlich sind

  Alt 22. Dez 2005, 16:00
hab das ganze nochmal nachgeproggt und festgestellt, dass die scanline-methode doch rasent schnell ist, wenn man nur die rgb-quads vergleicht.

also wenn ich den code weglasse, der einen gleichen pixel makiert (mit einem definiertem farbton versieht) brauch mein programm nur ca 10-20 ms anstatt 200 ms . kann das sein das das soviel zeit kostet oder hab ich mich verproggt *g*

hier mein code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
bitm1,bitm2:tbitmap;
start,ende,x,y,i,countfalsepixel:integer;
p,p2:PRGBQuad;
begin
bitm1 := tbitmap.Create;
bitm2 := tbitmap.Create;

bitm1.LoadFromFile('C:\bild1.bmp');
bitm2.LoadFromFile('C:\bild2.bmp');
 bitm1.PixelFormat := pf32bit;
 bitm2.PixelFormat := pf32bit;


start:= gettickcount;
for i:=1 to 1000 do
countfalsepixel:=0;
begin

for y := 0 to bitm1.Height - 1 do
  begin

    P := bitm1.ScanLine[y];
    P2 := bitm2.ScanLine[y];

  for x := 0 to bitm1.Width - 1 do
    begin

      if RGB(P^.rgbRed, P^.rgbGreen, P^.rgbBlue) <> RGB(P2^.rgbRed, P2^.rgbGreen, P2^.rgbBlue) then Inc(CountFalsePixel);

      Inc(P);
      Inc(P2);

    end;


  end;
end;

 ende := gettickcount;
bitm1.Free;
bitm2.Free;


  showmessage('falsche pixel:'+inttostr(countfalsepixel)+' in ms:'+inttostr(ende-start));
end;
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#12

Re: Nur prüfen ob Bilder unterschiedlich sind

  Alt 22. Dez 2005, 17:13
Hm,

ich würde es anders machen. Ich hoffe ich erzähle keinen Mist

Also. Mit Blockread kann man (so weit ich weiß) alle Dateitypen einlesen. Somit auch Bilder. Das würde in etwa so aussehen:

Delphi-Quellcode:
var
 datei1,datei2: file;
 NumRead1, NumRead2: Integer;
 Buf1, Buf2: byte;
 aufhoeren: boolean;
begin
 aufhoeren:=false;
 AssignFile(datei1,'Pfad1');
 Reset(datei1, 1);
 AssignFile(datei2,'Pfad2');
 Reset(datei2, 1);
  repeat
   BlockRead(datei1, Buf1, SizeOf(Buf1), NumRead1);
   BlockRead(datei2, Buf2, SizeOf(Buf2), NumRead2);
    if Buf1<>Buf2 then
     begin
      aufhoeren:=true; //ganze Prozedure abbrechen
     end;
  until eof(datei1) or eof(datei2) or (aufhoeren=true);
 closefile(datei1);
 closefile(datei2);
end;
Der ganze Code ist ungetestet. Mit blockread wird jedes Byte eingelesen und verglichen. Wenn der 1. Unterschied auftritt, wird alles abgebrochen, da es sonst unsinnig wäre, weiter zu suchen.

Ich hoffe mal, alles was ich erzählt habe ist wahr .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz