![]() |
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; |
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. |
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