Hi,
ich hab hier eine Aufgabe über der ich schon seit einiger Zeit grübele:
Als Vorgabe besitze ich eine eindimensionale Matrix (bestehend aus Breite*Höhe):
Map: array[0..256 * 256 - 1] of Boolean;
Die Aufgabe ist nun sämtliche gesetzte Punkte zu zählen und Regionen zuzuordnen. Mein Grundgerüst schaut wie folgt aus:
Code:
procedure FindRegions(const Width, Height: Integer; const Map: array of Boolean; var Regions: array of Integer);
var tmp: integer;
i, j: integer;
x, y: integer;
begin
// Regionen löschen
Fillchar(Regions, sizeof(regions), 0);
for y := 0 to Height - 1 do
for x := 0 to Width - 1 do
begin
end;
// Bubblesort von Groß, zu Klein
for i := 0 to high(regions) - 2 do
for j := 0 to high(regions) - 2 do
if (i <> j) and (regions[i] > regions[j]) then
begin
tmp := regions[i];
regions[i] := regions[j];
regions[j] := tmp;
end;
end;
Als Ausgabe sollte eine Integer Liste mit der Pixelanzahl der jeweiligen Regionen sein. Meine Idee ist anstelle des Map: array[0..256 * 256 - 1] of Boolean;
ein Map: array[0..256 * 256 - 1] of Integer; zu machen, dem bei der Initialisierung eine fortlaufende Nummer zu geben - der Einfachheit der Offset und die Punkte drumherum zu zählen und ggf. zusammenzuführen, also Punkt links, Punkt Oben, Punkt rechts <> 0, dann setze alle Punkte auf den Wert des ersten Punktes.
Das ganze hat aber Macken, weiß jemand von euch eventuell Rat?
Peter