Hi!
Die folgende C-Funktion möchte ich äquivalent in Delphi abbilden:
Code:
CV_INLINE void cvmSet( CvMat* mat, int i, int j, double val )
{
((double*)(mat->data.ptr + (size_t)mat->step*i))[j] = (double)val;
}
CvMat ist eine Matrix-Struktur (siehe unten), dessen Elemente mit der Funktion einzeln belegt werden sollen. i ist die Zeile, j die Spalte und val der einzutragende Wert.
Hier mein Versuch:
Code:
procedure cvmSet(var mat: P_CvMat; i: Integer; j: Integer; val: Double);
var
PTmpDouble: PDouble;
begin
PTmpDouble := PDouble(PChar(mat.data.ptr) + mat.step * i);
Inc(PTmpDouble, j);
PTmpDouble^ := val;
end;
Die CvMat-Struktur habe ich durch die Hilfe von NicoDE in diesem
Topic ja schon umgesetzt bekommen. Vielen Dank nochmal dafür!
Code:
type
P_CvMat = ^CvMat;
CvMat = record
type_ : Integer;
step : Integer;
(* for internal use only *)
refcount : PInteger;
data : record
case Integer of
0: (ptr : PByte);
1: (s : PSmallInt);
2: (i : PInteger);
3: (fl : PSingle);
4: (
db : PDouble)
end;
case Integer of
0: (rows : Integer);
1: (height: Integer;
case Integer of
0: (cols : Integer);
1: (width : Integer))
end;
Das Step steht für die Breite einer Martixzeile in Bytes. ptr zeigt auf den Inhalt.
Mein Problem besteht nun darin, dass ich die Elemente einer 3x3-Matrix mit Werten belege und dann wieder auslese, wobei sich die Werte komplett verändert haben.
Irgendeine Idee?
Gruß,
oXmoX