Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#4

Re: Hilfe! mein Scanline ist Kaputt!

  Alt 3. Nov 2008, 12:08
Zitat von xy124:
was mach' ich falsch?
- Zugriff auf Zeilen und Spalten richtig: 0..239, 0..319
- Die Addition der Farbwerte(Byte) ergibt wahrscheinlich einen Überlauf, da vorher keine Typumwandlung erfolgt.
- Der Durchschnitt aus allen drei Farbwerten ist nur eine grobe Vereinfachung der Helligkeit.
- Die Deklaration von Farbe1 und Farbe2 ist nicht aufgeführt, der eigentliche Fehler ist da zu vermuten.

Delphi-Quellcode:
uses
  GraphUtil;

type
  TBGR = packed record
    B, G, R: Byte;
  end;

procedure vergleichebilder2(bmp1, bmp2: TBitmap; dMax: Word);
var
  Farbe1, Farbe2: ^TBGR;
  Hue1, Luminance1, Saturation1,
  Hue2, Luminance2, Saturation2: Word;
  x, y, xMax, yMax, d: Integer;
begin
  yMax := Min(bmp1.Height, bmp2.Height) - 1;
  xMax := Min(bmp1.Width, bmp2.Width) - 1;
  bmp1.Pixelformat := pf24Bit;
  bmp2.Pixelformat := pf24Bit;

  for y := 0 to yMax do
  begin
    Farbe1 := bmp1.ScanLine[y];
    Farbe2 := bmp2.ScanLine[y];
    for x := 0 to xMax do
    begin
      ColorRGBToHLS(RGB(Farbe1^.R, Farbe1^.G, Farbe1^.B), Hue1, Luminance1, Saturation1);
      ColorRGBToHLS(RGB(Farbe2^.R, Farbe2^.G, Farbe2^.B), Hue2, Luminance2, Saturation2);
      {Umwandlung zu Integer für Differenzberechnung mit Vorzeichen}
      d := Integer(Luminance1) - Integer(Luminance2);
      if ABS(d) > dMax then
      begin
        farbe2^.B := 0;
        farbe2^.G := 0;
        farbe2^.R := 255;
      end;
      Inc(Farbe1);
      Inc(Farbe2);
    end;
  end;
end;
Bei mir erfolgreich getestet.
  Mit Zitat antworten Zitat