Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
Delphi 12 Athens
|
Re: Scanline: Punkt finden
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;
|
|
Zitat
|