我使用非托管库从 IP 摄像机获取视频流。有功能:
[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
);
pClientInfo是指向结构类型的指针:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
protected struct LiveConnect
{
public UInt32 dwChannel;
public IntPtr hPlayWnd;
public UInt32 dwConnectMode;
}
wherehPlayWnd是必须输出视频流的窗口句柄。该库通过此窗口的大小检测视频分辨率(在调用期间Network_ClientStartLive)。我在 C++ MFC 程序上检查了它,输出窗口在哪里,Picture control并通过使用方法设置大小来MoveWindow定义输出视频分辨率。
在这个程序的 C# 版本中,我使用PictureBox-control 来绘制视频流。视频显示,但大小PictureBox不影响视频流分辨率。我尝试了几种方法来改变PictureBox大小:
- 环境
pictureBox.Size - 使用 WinAPI
SetWindowPos:
[DllImport("user32.dll")]
私有静态外部布尔 SetWindowPos(
IntPtr hWnd,
IntPtr hWndInsertAfter,
整数 x,
整数,
整数宽度,
整数高度,
uint uFlags);
在这两种方法中,控件的大小都发生了变化,但相机库继续以最大分辨率输出视频流。
我怎么解决这个问题?
谢谢!