开启左侧

hWindowControl控件图像采集不刷新的问题

[复制链接]
bailujun 发表于 2022-8-30 09:14:13 | 显示全部楼层 |阅读模式
  1. public static void OpenCamera(HWindowControl hwc, bool isLive = false, bool isColurs = true,
  2.             string cameraName = "[0] ", string cameraType = "DirectShow")
  3.         {
  4.      HOperatorSet.GenEmptyObj(out ho_image);
  5.     //销毁图像,不然造成内存泄漏
  6.      ho_image.Dispose();
  7.      ht_CameraHandle = new HTuple();
  8.      ht_CameraHandle.Dispose();

  9.      HOperatorSet.OpenFramegrabber(cameraType, 1, 1, 0, 0, 0, 0, "default", 8, isColurs ? "rgb" : "gray", -1, "false", "default",
  10.      cameraName, 0, -1, out ht_CameraHandle);
  11.      HOperatorSet.SetFramegrabberParam(ht_CameraHandle, "grab_timeout", 2000);
  12.     //HOperatorSet.SetFramegrabberParam(ht_CameraHandle, "gamma", 116);
  13.     HOperatorSet.GrabImageStart(ht_CameraHandle, -1);
  14.         }
复制代码
这是打开相机的方法
这是采集图像与显示图像的方法
  1. public static void CollectImage(HWindowControl hwc)
  2.         {
  3.     HOperatorSet.OpenWindow(0, 0, hwc.Width, hwc.Height, hwc.HalconWindow, "visible", "", out ht_WindowHandle);//open window,将图片的长宽改为控件的长宽
  4.     HDevWindowStack.Push(ht_WindowHandle);//入栈
  5.         }</font>
复制代码
  1. public static void ShowImage(HWindowControl hwc)
  2.         {
  3.    hwc.HalconWindow.ClearWindow();
  4.    
复制代码



这个为打开相机调用方法
  1. private void btnConnectCamera_Click(object sender, EventArgs e)
  2.         {
  3.      Task.Run(() =>
  4.      {
  5.         try
  6.          {
  7.             HalconHelper.OpenCamera(hwcMain, this.ckbLive.Checked, !this.ckbBlackWhite.Checked);

  8.              this.Invoke(new Action(() =>
  9.               {
  10.                  this.btnCollectImage.Enabled = true;
  11.                   this.btnCloseCamera.Enabled = true;
  12.            }));

  13.         }
  14.                 catch (Exception ex)
  15.                 {

  16.      MessageBox.Show(ex.Message);
  17.                 }
  18.             });
  19.         }
复制代码
这是图像采集与定时刷新
  1. private void btnCollectImage_Click(object sender, EventArgs e)
  2.         {
  3.         if (this.ckbLive.Checked)
  4.        {
  5.           updateTimer.Interval = 100;
  6.           updateTimer.Tick += UpdateTimer_Tick;
  7.           updateTimer.Enabled = true;
  8.           HalconHelper.CollectImage(hwcMain);
  9.         }
  10.       else
  11.        {
  12.           HalconHelper.CollectImage(hwcMain);
  13.           HalconHelper.ShowImage(hwcMain);
  14.         }

  15.         }

  16.         private void UpdateTimer_Tick(object sender, EventArgs e)
  17.         {
  18.        HalconHelper.ShowImage(hwcMain);
  19.         }
复制代码
这是关闭相机
  1. private void btnCloseCamera_Click(object sender, EventArgs e)
  2.         {
  3.    updateTimer.Enabled = false;
  4.    HalconHelper.CloseCamera();
  5.    this.btnCloseCamera.Enabled = false;
  6.    this.btnCollectImage.Enabled = false;
  7.         }
复制代码
图片为界面

目前测试的时候是第一无论是单个图像或者显示视频就只会显示一次在HWindowControl,关闭相机再重新打开,控件就不更新了,试了控件的一些方法ClearWindow或者refresh都不管用,目前很是费解,想大家帮忙看下是哪里的问题,菜鸟一枚非常感谢!
捕获.JPG
Criss 发表于 2022-8-30 21:18:27 | 显示全部楼层
网上部分自绘的UI可能会导致无法刷新需要更换控件机制,你可以尝试更换该部分代码到新建项目中测试。
 楼主| bailujun 发表于 2022-8-31 10:25:19 | 显示全部楼层
Criss 发表于 2022-8-30 21:18
网上部分自绘的UI可能会导致无法刷新需要更换控件机制,你可以尝试更换该部分代码到新建项目中测试。 ...

UI是我自己创建的,不是复制的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表