How to compare two pf24bit images #145

The code below compares two pf24bit images and tells you if they are alike or not. It also gives you the lines and pixels that are different:

function Tbilde_form.CompareBitmaps(B1, B2: TBitmap): boolean;
var
  ps1, pr1, ps, pr: PRGBTriple;
  I, J, Bps: Integer;
  tid: TDateTime;

  function BytesPerScanline(PixelsPerScanline, BitsPerPixel,
    Alignment: Longint): Longint;
  begin
    Dec(Alignment);
    Result := ((PixelsPerScanline * BitsPerPixel) + Alignment)
      and not Alignment;
    Result := Result div 8;
  end;

begin
  tid := now;
  Result := True;
  ps1 := b1.ScanLine [0];
  pr1 := b2.ScanLine [0];
  Bps := BytesPerScanLine(b1.Width, 24, 32);
  for I := 0 to b1.Height - 1 do
  begin
    ps := PRGBTriple (PChar (ps1) - Bps * I);
    pr := PRGBTriple (PChar (pr1) - Bps * I);
    for J := 0 to b1.Width - 1 do
    begin
      if not CompareMem(Pr, Ps, SizeOf(TRGBTriple)) then
      begin
        memo1.lines.Add('Line:' + inttostr(I) + ' point: ' + inttostr(j));
        Result := False;
       {Break}
      end;
      Inc (pr);
      Inc (ps)
    end;
    {if not Result then Break}
  end;
  tid_label.caption := timetostr(now - tid);
end;
Original resource: The Delphi Pool
Author: Paul Loht & Bernt Wold
Added: 2009/11/06
Last updated: 2009/11/06