es gäbe da 2 möglichkeiten
type
T2DArray = array of array of whatever;
oder
type
T2DArray = array of whatever; // ooh wunder
procedure Init2DArray(aArray: T2DArray; Width, Height: integer);
begin
SetLength(aArray, Width * Height);
end;
// gäbe natürlich auch noch ne 3te variante über pointer
type
P2DArray = ^T2DArray;
T2DArray = array of whatever;
procedure Init2DArray(var aArray: P2DArray; Width, Height: integer);
begin
GetMem(aArray, Width * Height * sizeof(whatever);
end;
um jetz aber nen 2d feld aus dem 1d feld zu machen behilft man sich einer einfachen rechnung
da die "zeilen" des "2d" feldes aneinandergereit im 1d feld untergebracht sind
function PositionToIndex(X, Y: integer): integer;
begin
Result := Y * Height + X;
end;
Index wäre die position im 1d feld
ich denke IndexToPosition(Index: integer): TPoint; kannst dir selber herleiten...
so und dann is das speichern auch kein problem mehr
var
xFS: TFileStream;
begin
xFS := TFileStream('2ddaten.bin', fmCreate);
xFS.Write(Width * Height, 4);
for i := 0 to (Width * Height) - 1 do
xFS.Write(aArray[i], sizeof(whatever));
FreeAndNil(xFS);
end;
"whatever" wäre dann integer, oder byte, oder wieder nen anderes record - da müsste man dann die schreib routine anpassen