Thema: Delphi Bilder vergleichen

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

Re: Bilder vergleichen

  Alt 8. Sep 2004, 21:31
Also PByteArray ist ein Zeiger auf TByteArray und TByteArray ist als "Array[0..32767] of Byte" definiert.
Length(P) hätte eh nicht funktioniert, da P ein Pointer ist und immer 4 Byte (derzeit) ist

So, das mit CompareMem läuft jetzt:
Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
  Var i, R, W, L, X: Integer;
    BitMap, BitMap2: TBitMap;

  Begin
    BitMap := TBitMap.create;
    BitMap2 := TBitMap.create;
    BitMap.LoadFromFile('vorlage.bmp'); //Laden der ausgangsdatei
    BitMap2.LoadFromFile('screenshot.bmp'); //Laden der vergleichsdatei
    If BitMap.PixelFormat <> BitMap2.PixelFormat Then
      Label1.Caption := 'unterschiedliches Pixelformat'
    Else If (BitMap.Width <> BitMap2.Width) and (BitMap.Height <> BitMap2.Height) Then
      Label1.Caption := 'unterschiedliche Bildgröße'
    Else Begin
      R := 0; W := 0;
      Case BitMap.PixelFormat of
        pf1bit: L := Ceil(BitMap.Width / 8);
        pf4bit: L := Ceil(BitMap.Width / 2);
        pf8bit: L := BitMap.Width;
        pf15bit: L := Ceil(BitMap.Width * 15 / 8); {ich hoffe mal das für die 15 Bit stimmt}
        pf16bit: L := BitMap.Width * 2;
        pf24bit: L := BitMap.Width * 3;
        pf32bit: L := BitMap.Width * 4;
      End;
      For i := 0 to BitMap.Height - 1 do
        If CompareMem(BitMap.ScanLine[i], BitMap2.ScanLine[i], L) Then Inc(R) Else Inc(W);
      Label1.Caption := IntToStr(R) + ' gleiche und ' + IntToStr(W) + ' unterschiedliche Zeilen';
    End;
  End;
$2B or not $2B
  Mit Zitat antworten Zitat