Thema: Delphi Scanline: Punkt finden

Einzelnen Beitrag anzeigen

Blup

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

Re: Scanline: Punkt finden

  Alt 3. Sep 2008, 17:13
Hier mal ein Versuch, nicht getestet.
Delphi-Quellcode:
{packed ist wichtig, sonst werden durch die Speicherausrichtung eventuell für jede Variable 4 Byte reserviert}
type
  PPixel24Bit = ^TPixel24Bit;
  TPixel24Bit = packed record
    Blue,
    Green,
    Red: Byte;
  end;

procedure TFTest.MakeRed(Bit: TBitmap);
const
  Schwellwert = 25; {willkürliche Festlegung ab wann ein Pixel als Rot gilt}
var
  Merker: record
    d: Integer;
    x, y: Integer;
  end;
  p: PPixel24Bit;
  x, y: Integer;
  d1, d2, d: Integer;
begin
  {Pixelformat muss hier pf24Bit sein, sonst stimmen die Werte nicht
   und es könnte sogar eine Zugriffsverletzung geben}

  Bit.Pixelformat := pf24Bit;
  Merker.d := 0;
  Merker.x := 0;
  Merker.y := 0;

  for y := 0 to Bit.Height - 1 do
  begin
    p := Bit.ScanLine[y];
    for x := 0 to Bit.Width - 1 do
    begin
      {sehr vereinfachte Ermittlung wie stark der Rotanteil überwiegt, geht auch besser}
      d1 := p.red - p.blue;
      d2 := p.red - p.green;
      d := Min(d1, d2);
      {Pixel mit der höchsten Rotdifferenz merken}
      if d > Merker.d then
      begin
        Merker.d := d;
        Merker.x := x;
        Merker.y := y;
      end;
      Inc(p);
    end;
  end;
 
  if Merker.d > Schwellwert then
    ShowMessage(Format('Juchhu!!! Zeile: %d Spalte: %d', [Merker.y, Merker.x]));
end;
  Mit Zitat antworten Zitat