Ich verwende nicht verwaltete Bibliotheken, um Videostreams von IP-Kamera zu erhalten. Es Funktion ist:Winform-Steuerelementgröße kann nicht in nicht verwalteten Code übergeben werden.
[DllImport("client.dll", EntryPoint = "Network_ClientStartLive", SetLastError = true)]
protected static extern int Network_ClientStartLive(
ref IntPtr pStream,
IntPtr hDev,
IntPtr pClientInfo,
[MarshalAs(UnmanagedType.FunctionPtr)] ReadDatacbf lpfnCallbackFunc = null,
UInt32 dwUserData = 0
);
Die pClientInfo
ist ein Zeiger auf Strukturtyp:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
protected struct LiveConnect
{
public UInt32 dwChannel;
public IntPtr hPlayWnd;
public UInt32 dwConnectMode;
}
wo hPlayWnd
ist ein Handgriff des Fensters, in dem Videostrom ausgegeben werden muß. Die Bibliothek erkennt die Videoauflösung anhand der Größe dieses Fensters (während des Aufrufs an Network_ClientStartLive
). Ich überprüfte es auf C++ MFC-Programm, wo Ausgabefenster ist Picture control
und durch Festlegen der Größe mit Methode MoveWindow
wurde Ausgabe Videoauflösung definiert.
In der C# Version dieses Programms verwende ich eine PictureBox
-control, um den Video-Stream zu zeichnen. Das Video wird angezeigt, aber die Größe des PictureBox
hat keine Auswirkungen auf die Auflösung des Videostreams. Ich habe versucht, verschiedene Methoden PictureBox
Größe zu ändern:
pictureBox.Size
- Einstellung WinAPI mit
SetWindowPos
:
[DllImport("user32.dll")] private static extern bool SetWindowPos( IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int width, int height, uint uFlags);
Bei beiden Verfahren die Größe der Steuerung geändert wurde, aber die Kamera Bibliothek fortgesetzt Ausgang Videostream in maximaler Auflösung.
Wie kann ich dieses Problem lösen?
Danke!
Ich kann nicht an einen Fehlermodus denken, es gibt nichts grundsätzlich anders zwischen einer .NET PictureBox und einem nicht verwalteten Bild Steuerelement, soweit nicht verwalteten Code jemals kümmern oder sehen würde. Bedenken Sie die Möglichkeit, dass Sie den falschen Fenstergriff übergeben. Wie die des Formulars oder des Desktops (null). Wenden Sie sich an den Bibliothekshersteller oder -autor, um Unterstützung zu erhalten. Sie können dies problemlos beheben. –
Ich vermute auch, dass der Griff falsch ist. Schreiben Sie das übergebene Handle in ein Protokoll und verwenden Sie während der Ausführung der Anwendung das Dienstprogramm Spy ++, um die Bildbox auszuwählen. Wenn das Handle Spy ++ nicht mit dem Handle übereinstimmt, das Sie geloggt haben, wissen Sie, dass etwas nicht funktioniert. – dazedandconfused