我在做海康视频采集卡的SDK开发中遇到了以下问题:
1、在一个panel中单独打开任意一路图像是可以的
2、如果将panel分成多个Rectangle,在每一个Rectangle中各显示一路图像时只能显示出来第一路图像,其余的都显示不出来。
我的测试代码如下:
测试代码:
private void Form1_Load(object sender, EventArgs e)
{
IntPtr[] handle = new IntPtr[4];
Rectangle[] rec =new Rectangle[4];
uint iTotalDSPs;
if (HikVisionSDK.InitDSPs() <= 0)
{
MessageBox.Show("视频压缩卡初始化失败!");
return;
}
iTotalDSPs = HikVisionSDK.GetEncodeChannelCount(); //获取系统中编码通道的总数
int sqrt =2;//获取画面显示模式值的平方根
for (int i = 0; i < 4; i++)
{
handle[i] = HikVisionSDK.ChannelOpen(i);
HikVisionSDK.SetStreamType(handle[i], 1);
HikVisionSDK.SetEncoderPictureFormat(handle[i], PictureFormat_t.ENC_DCIF_FORMAT);
HikVisionSDK.SetPreviewOverlayMode(true);//开启overlay预览模式(当显示范围大于704*576时,会自动启动此模式)
HikVisionSDK.SetOverlayColorKey(ColorTranslator.ToWin32(System.Drawing.Color.White));
rec[i].Location = new Point((panel_RealPlay.Width / sqrt) * (i % sqrt), (panel_RealPlay.Height / sqrt) * (i / sqrt));//设置每个窗体左上角坐标点
rec[i].Size = new Size(panel_RealPlay.Width / sqrt, panel_RealPlay.Height / sqrt);//设置每个窗体的尺寸(高度和宽度)
}
for (int i = 0; i < 4; i++)
{
HikVisionSDK.StartVideoPreview(handle[i], panel_RealPlay.Handle, ref rec[i], false, 0, 25);
}
}
------解决方案--------------------
ref rec[i]改为固定的rec[0]