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...
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; 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 Narses: Beiträge zusammengefasstIch 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 Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 25.03.2012 um 15:18