Autor Beitrag
Bienenelf
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Sa 24.03.12 13:32 
Hallo liebe Delphi Gemeinde,

ich habe den folgenden Code im Easy Delphi Helper gefunden. Nun habe ich diesbezüglich eine frage:
Stellt die Funktion der ScanLine ein 2D- Array oder arbeitet es, das Array nur für den einen Pixel ab und beim nächsten Schleifendurchlauf wird er wieder überschrieben?

Gruß Bienenelf...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure CompareImages(Image1, Image2: TImage);
var x, y: integer;
  anzahl_unterschiede: LongInt;
  zeile1, zeile2: PByteArray;
  prozent: single;
const schwellenwert=5;
  // Erst wenn die Unterschiede den Schwellenwert überschreiten,
  // wird die Abweichung registriert.
begin
  anzahl_unterschiede:=0;
  for y:=0 to image1.Picture.Bitmap.height-1 do begin
    zeile1:=image1.Picture.Bitmap.scanline[y];
    zeile2:=image2.Picture.Bitmap.scanline[y];
    for x:=0 to image1.Picture.Bitmap.width-1 do
      if abs(zeile1[x]-zeile2[x])>schwellenwert then
        inc(anzahl_unterschiede);
    if image1.Picture.Bitmap.height*image1.Picture.Bitmap.width>0 then
      prozent:=100*(anzahl_unterschiede/(image1.Picture.Bitmap.height*
      image1.Picture.Bitmap.width))
    else
      prozent:=0;
    label1.caption:='Unterschiede:'+FloatToStr(prozent)+'%';
  end;
end;


Moderiert von user profile iconNarses: Beiträge zusammengefasst

Ich habe schon selber die Lösung gefunden.
Danke

Nämlich: Scanline zeigt nur auf ein Pixel.
Wenn man nun Pixel aufzeichnen möchte so muss man sie in ein 2D Array schreiben.

gruß Bienenelf


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 25.03.2012 um 15:18