![]() |
C/C++ umsetzung nach Delphi
Hallo zusammen
Ich bin dabei die Funktionalität von openCV in Delphi zu erweitern. Jetzt bin ich auf ein Problem gestoßen. Und zwar cvMat in der doku zu cxCore steht Zitat:
Delphi-Quellcode:
wenn ich jetzt eine matrizze erzeuge in etwa soCV_MAT_TYPE_MASK = 31; CV_MAT_MAGIC_VAL = $42420000; CV_MAT_CONT_FLAG_SHIFT = 9; CV_MAT_CONT_FLAG = 1 shl CV_MAT_CONT_FLAG_SHIFT; CV_MAT_CN_MASK = 3 shl 3; CV_MAT_DEPTH_MASK = 7; TMatData = record ptr: PUCHAR; end; CvMat = record type_ : Integer; step : Integer; refcount : PInteger; data : TMatData; rows : Integer; cols : Integer; end; TCvMat = CvMat;
Delphi-Quellcode:
und mir die Matrize anschaue dann ist
procedure TForm1.FormCreate(Sender: TObject);
var mat : pcvMat; refcount : integer; begin mat := cvCreateMat(3,2, 8); refcount := mat.refcount^; ShowMessage(intToStr(refcount)); end; mat $392A00 mat^ (1111638024, 4, $392A60, ($1), 3746432, 3) wobei 1111638024 $42424008 als hex ist und mit CV_MAT_MAGIC_VAL verundet 8 ergibt, was ja auch sinn macht als type_ die 4 als step $392A60 ist dann ja wohl der der poinnter auf refcount und da steht dann in mat^.refcount^ 1 drin! bis hierher ist ja noch alles mehr oder weniger begreiflich aber was ist denn das ($1)? das soll ein Pointer auf die daten der Matrix sein! Und da kommt dann auch ein Fehler. 3746432 sind auch nicht meine eingetragenen reihen! komischerweise erscheint der reihen wert dann als col wert als letztes element. Kann damit jemand was anfangen und mir etwas weiterhelfen?? Gruß stefan |
Re: C/C++ umsetzung nach Delphi
Die Deklaration von TMatData sieht mir etwas ärmlich aus gegenüber der C-Deklaration der entsprechenden Union.
|
Re: C/C++ umsetzung nach Delphi
Das equivalent von union sind übrigens Variante Records (um dir den richtigen Suchbegriff zu liefern) ;)
|
Re: C/C++ umsetzung nach Delphi
Ja! Danke für die Anregungen, damit habe ich es glaube ich geschaft.
Die deklaration sieht jetzt so aus
Delphi-Quellcode:
und damit kann ich die matrize füllen und lesen.
CvMat = record
type_ : Integer; step : Integer; refcount : ^LongInt; size : integer; data : record case longint of 0 : ( ptr : ^uchar ); 1 : ( fl : ^double ); 2 : ( db : ^double ); 3 : ( i : ^longint ); 4 : ( s : ^smallint ); end; rows : Integer; cols : Integer; end; Dank&Gruß Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:51 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