ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
594
594
EMPFEHLEN
-
Hi,
ich spiele gerade etwas mit dem CL NUI Treiber für Kinect rum und komme dort jetzt seit zwei Tagen nicht weiter.
Es geht mir speziell um einen dll-Aufruf, den ich nicht verarbeitet bekomme.
Der Import in C sieht wie folgt aus:
In C# dagegen so:Code :1
IMPORT(bool) GetNUICameraDepthFrameRAW(CLNUICamera cam, PUSHORT pData, int waitTimeout = 2000);
Mit Angabe von camera und timeout werden die Daten dann also in den IntPtr data geladen.Code :1 2
[DllImport("CLNUIDevice.dll", EntryPoint = "GetNUICameraDepthFrameRAW", CallingConvention = CallingConvention.Cdecl)] public static extern bool GetCameraDepthFrameRAW(IntPtr camera, IntPtr data, int timeout);
Da die Auflösung 640x480 ist, habe ich mir nun zunächst einen IntPtr erzeugt und ihm Speicherplatz zugewiesen:
Ohne das allozieren habe ich zwar keinen Fehler bekommen, allerdings enthielt pout dann auch keinen Pointer. Jetzt müsste ich doch, angefangen bei der Adresse von pout, 640 * 480 * sizeof(uint) viele Pointer haben, die ich nun alle dereferenzieren könnte, um an die Daten zu kommen. Hier bin ich allerdings nicht weitergekommenCode :1
IntPtr pout = Marshal.AllocHGlobal(640 * 480 * sizeof(uint));

Gibt es denn vielleicht in C# einen besseren Weg um an die Ausgabe einer dll zu gelangen?
-
02.03.11 14:42 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Warum sollten da Zeiger drin sein? Soweit ich verstehe sind da Pixel drin die du untersuchen kannst. Warum verwendest du denn uint statt ushort?
Wenn die Größe des Arrays immer gleich ist, kannst du auch direkt ein Array übergeben:
GrußCode csharp:1 2 3
[DllImport("CLNUIDevice.dll", EntryPoint = "GetNUICameraDepthFrameRAW", CallingConvention = CallingConvention.Cdecl)] public static extern bool GetCameraDepthFrameRAW(IntPtr camera, [MarshalAs(UnmanagedType.LPArray, SizeConst=640*480)] ushort[] data, int timeout);
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Hey super, dank dir. Das ist natürlich sehr elegant

Das uint hatte ich fälschlicher Weise von DepthFrameRGB32 genommen, weil dort PDWORD steht. Außerdem hatte ich das "StartCamera()" zu dicht vor dem Aufruf, sodass dann mit einem timeout von 0 offenbar zu wenig Zeit für eine Ausgabe vergangen war.
Ich hab jetzt versucht, dass ColorFrameRGB32 analog umzusetzten, allerdings bekomme ich hier nur wieder nullen als Ausgabe.
Hier sind mal die weiteren imports:
Lieg ich denn bei GetCameraColorFrameRGB32 mit einem uint[] bzw. UInt32[] richtig? Das hat beides nicht funktioniert.Code :1 2 3 4 5 6 7 8 9 10
// Camera video frame image data retrieval IMPORT(bool) GetNUICameraColorFrameRAW(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000); IMPORT(bool) GetNUICameraColorFrameRGB24(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000); IMPORT(bool) GetNUICameraColorFrameRGB32(CLNUICamera cam, PDWORD pData, int waitTimeout = 2000); // Camera depth frame image data retrieval IMPORT(bool) GetNUICameraDepthFrameRAW(CLNUICamera cam, PUSHORT pData, int waitTimeout = 2000); IMPORT(bool) GetNUICameraDepthFrameCorrected12(CLNUICamera cam, PUSHORT pData, int waitTimeout = 2000); IMPORT(bool) GetNUICameraDepthFrameCorrected8(CLNUICamera cam, PBYTE pData, int waitTimeout = 2000); IMPORT(bool) GetNUICameraDepthFrameRGB32(CLNUICamera cam, PDWORD pData, int waitTimeout = 2000);
Irgendwo hatte ich allerdings gelesen, dass UInt32 dem DWORD entspricht.
Danke!
Ähnliche Themen
-
verarbeiten von XML Daten
Von herr-stromberg im Forum Coders TalkAntworten: 1Letzter Beitrag: 22.10.07, 21:45 -
XML-Daten trotz Fehlern verarbeiten
Von Pendergast im Forum PHPAntworten: 2Letzter Beitrag: 01.04.06, 11:00 -
Button-->Daten verarbeiten-->Problem
Von BIAsTeR im Forum PHPAntworten: 1Letzter Beitrag: 26.09.05, 16:20 -
xml daten verarbeiten...
Von rottenapple im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 27.05.04, 23:36 -
Perl Daten in PHP verarbeiten
Von noisy im Forum PHPAntworten: 4Letzter Beitrag: 11.09.03, 13:17





Zitieren

Login





