我使用非托管库从 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);
在这两种方法中,控件的大小都发生了变化,但相机库继续以最大分辨率输出视频流。
我怎么解决这个问题?
谢谢!