Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Scanline: Punkt finden (https://www.delphipraxis.net/119663-scanline-punkt-finden.html)

Blup 3. Sep 2008 16:13

Re: Scanline: Punkt finden
 
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;

Namenloser 3. Sep 2008 16:55

Re: Scanline: Punkt finden
 
Such hier im Forum mal nach HSL. Ggf. kannst du dir auch die Graphics32 anschauen. Für den Rest bitte das Gehirn einschalten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz