Uso le librerie non gestite per ottenere il flusso video dalla telecamera IP. C'è funzione:Impossibile passare la dimensione del controllo Winform nel codice non gestito
[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
);
Il pClientInfo
è un puntatore alla struttura di tipo:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
protected struct LiveConnect
{
public UInt32 dwChannel;
public IntPtr hPlayWnd;
public UInt32 dwConnectMode;
}
dove hPlayWnd
è un handle di finestra in cui streaming video deve essere emesso. La libreria rileva la risoluzione video per dimensione di questa finestra (durante la chiamata a Network_ClientStartLive
). Ho controllato il programma C++ MFC, dove la finestra di output è Picture control
e impostando la dimensione con il metodo MoveWindow
è stata definita la risoluzione video di uscita.
Nella versione C# di questo programma sto utilizzando un controllo PictureBox
per disegnare il flusso video. Il video viene visualizzato ma le dimensioni di PictureBox
non influiscono sulla risoluzione del flusso video. Ho provato diversi metodi per modificare PictureBox
dimensioni:
- modificando
pictureBox.Size
- usando WinAPI
SetWindowPos
:
[DllImport("user32.dll")] private static extern bool SetWindowPos( IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int width, int height, uint uFlags);
In entrambi i metodi che la dimensione del controllo è stato cambiato ma la biblioteca fotocamera continuato all'uscita flusso video in massima risoluzione.
Come posso risolvere questo problema?
Grazie!
Non riesco a pensare a una modalità di errore, non c'è nulla di fondamentalmente diverso tra un PictureBox .NET e un controllo immagine non gestito fino a quando il codice non gestito avrebbe mai a cuore o vedere. Considera la possibilità che stai passando la maniglia della finestra sbagliata. Come il modulo o il desktop (null). Contattare il fornitore della libreria di telecamere o l'autore per il supporto, possono facilmente eseguire il debug di questo. –
Sospetto anche che la maniglia sia sbagliata. Scrivi l'handle che stai passando ad un log e mentre la tua app è in esecuzione, usa l'utility Spy ++ per selezionare la picturebox. Se la maniglia Spy ++ non corrisponde alla maniglia che hai registrato, saprai che qualcosa è successo. – dazedandconfused