FrmCodeLearn.cs 9.8 KB
using HalconDotNet; 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CodeLibrary;

namespace CodeLibrary
{
    public partial class FrmCodeLearn : FrmBase
    {
       
        private List<string> baslerNameList = new List<string>();
        private List<string> hikNameList = new List<string>();
        public FrmCodeLearn()
        {
            InitializeComponent();
        }
        private string selCamera =CodeResourceControl.GetString(CodeResourceControl.selCamera, "请先选择相机");
        private string selImage = CodeResourceControl.GetString(CodeResourceControl.selImage, "请先选择图片");
        private string title = CodeResourceControl.GetString(CodeResourceControl.title, "提示");
        private string imageIsNull = CodeResourceControl.GetString(CodeResourceControl.imageIsNull, "获取二维码图片为空");
        private string sureDelete = CodeResourceControl.GetString(CodeResourceControl.sureDelete, "确定删除文件:");
        private Bitmap GetCameraBitmap()
        {
            Bitmap bitmap = null;
            int index = cmbCamera.SelectedIndex;
            string camerName = cmbCamera.Text;
            if (index < 0)
            {
                MessageBox.Show(selCamera);
                return null;
            }
            //if (baslerNameList.Contains(camerName))
            //{
            //    BaslerCamera.Instance.Open(camerName);
            //    BaslerCamera.Instance.GrabOne();
            //    bitmap = BaslerCamera.Instance.Image;
            //    BaslerCamera.Instance.Close();
            //}
            //else
            //{
            //    HIKCamera.Instance.Open(camerName);
            //    HIKCamera.Instance.GrabOne();
            //    bitmap = HIKCamera.Instance.Image;
            //    HIKCamera.Instance.Close();
            //}
            bitmap = Camera._cam.GrabOneImage(camerName);
            return bitmap;
        }
        private void btnOpen_Click(object sender, EventArgs e)
        {
            string filePath = txtParamPath.Text;
            string cameraName = "";
            string codeType = this.cmbCodeType.Text;
            int count = cmbCount.SelectedIndex + 1;
            if (chbUseCamera.Checked)
            {
                if (chbHalcon.Checked)
                {
                    cameraName = cmbHalconCamera.Text;
                    if (cameraName.Equals(""))
                    {
                        MessageBox.Show(selCamera,title, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                }
                else
                {
                    Bitmap bitmap = GetCameraBitmap(); 
                    if (bitmap != null)
                    {
                        HDLogUtil.info("从相机【" + cmbCamera.Text + "】获取到一张图片");
                        pictureBox1.Image = bitmap;
                        HObject hoImage = HDCodeHelper.Bitmap2HObjectBpp24(bitmap);
                        HDCodeLearnHelper.DefaultImage = hoImage;
                    }
                    else
                    {
                        return;
                    }
                }
            }
            else
            {
              
                if (pictureBox1.Image == null)
                { 
                    MessageBox.Show(selImage,title ,MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                Bitmap bitmap = new Bitmap( pictureBox1.Image);
                HObject Image = HDCodeHelper.Bitmap2HObjectBpp24(bitmap);
                HDCodeLearnHelper.DefaultImage = Image;
            }
            Task.Factory.StartNew(delegate ()
            {
                HDCodeLearnHelper.StartLearn(this.hWindowControl1.HalconWindow, cameraName, codeType, filePath, count,5000);
            });
            FormStatus(true);
        }
        private void LoadCamera()
        {
            //string[] camerName = BaslerCamera.Instance.CameraName;
            //baslerNameList.AddRange(camerName);
            cmbCamera.Items.Clear();
            foreach (string str in Camera._cam.Name)
            {
                cmbCamera.Items.Add(str);
            }

            //camerName = HIKCamera.Instance.CameraName;
            //hikNameList.AddRange(camerName);
            //foreach (string str in camerName)
            //{
            //    cmbCamera.Items.Add(str);
            //}
            if (cmbCamera.Items.Count > 0)
            {
                cmbCamera.SelectedIndex = 0;
            }
        }
        private void FormStatus(bool open)
        {
            btnOpen.Enabled = !open;
            btnStop.Enabled = open;  
        } 
        private void btnStop_Click(object sender, EventArgs e)
        {
            HDCodeLearnHelper.StopLearn();
            FormStatus(false);
        }

        private void FrmCamera_Load(object sender, EventArgs e)
        {
            cmbCount.SelectedIndex = 0;
            chbTest.Checked = HDCodeLearnHelper.IsNeedTest;
            CheckForIllegalCrossThreadCalls = false;
            HDLogUtil.logBox = this.richTextBox2;
            if (HDCodeLearnHelper.codeTypeList.Count <= 0)
            {
                HDCodeLearnHelper.LoadConfig("", "");
            }
            LoadCamera();
            FormStatus(false); 
            cmbHalconCamera.DataSource = HDCodeLearnHelper.cameraNameList;
            if (HDCodeLearnHelper.cameraNameList.Count > 0)
            {
                cmbHalconCamera.SelectedIndex = 0;
            }
            cmbCodeType.DataSource = HDCodeLearnHelper.codeTypeList;
            if (HDCodeLearnHelper.codeTypeList.Count > 0)
            { 
                cmbCodeType.SelectedIndex = 0;
            } 
          
            string filePath =HDCodeHelper.GetCodeParamFilePath(cmbCodeType.Text);
            txtParamPath.Text = filePath;
            cmbCount.Items.Clear();
            for(int i = 1; i <= 300; i++)
            {
                cmbCount.Items.Add(i);
            }
            cmbCount.SelectedIndex = 0;
            chbUseCamera.Checked = true;
            timer1.Start();
        }

        private void FrmCamera_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (btnStop.Enabled.Equals(true))
            {
                btnStop_Click(null, null);
                HDLogUtil.logBox = null;
                FormStatus(false);
            }
        }
      
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (HDCodeLearnHelper.IsRun)
            {
                if (btnOpen.Enabled)
                {
                    btnOpen.Enabled = false ;
                }
            }
            else
            {
                if (btnOpen.Enabled.Equals(false))
                {
                    btnOpen.Enabled = true;
                }
            }
             
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cmbCodeType_SelectedIndexChanged(object sender, EventArgs e)
        { 
            if (cmbCodeType.SelectedIndex >= 0)
            { 
                txtParamPath.Text = HDCodeHelper.GetCodeParamFilePath(cmbCodeType.Text  );
            }
        }

        private void btnClearLog_Click(object sender, EventArgs e)
        {
            HDLogUtil.ClearLog();
        }

        private void chbTest_CheckedChanged(object sender, EventArgs e)
        {
            HDCodeLearnHelper.IsNeedTest = chbTest.Checked;
        }

        private void btnSelImage_Click(object sender, EventArgs e)
        {
            System.Windows.Forms.OpenFileDialog openDialog = new System.Windows.Forms.OpenFileDialog();
            openDialog.Title = selImage;
            openDialog.Filter = "(*.jpg)|*.jpg|(*.png)|*.png|(*.bmp)|*.bmp";
            //openDialog.DefaultExt = "png";
            System.Windows.Forms.DialogResult result = openDialog.ShowDialog();
            if (result == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }
            txtPath.Text = openDialog.FileName;
            string filename = txtPath.Text;
            if (string.IsNullOrEmpty(filename))
            {
                MessageBox.Show(imageIsNull);
            }
            pictureBox1.Image = null;
            //读取图片内容
            Image img = (Image)Image.FromFile(filename).Clone();
            pictureBox1.Image = img;
        }
         
        private void chbUseCamera_CheckedChanged(object sender, EventArgs e)
        {
            if (chbUseCamera.Checked)
            {
                cmbHalconCamera.Enabled = true ;
                btnSelImage.Enabled = false; 
            }
            else
            { 
                cmbHalconCamera.Enabled = false ;
                btnSelImage.Enabled = true ;
            }
        }

        private void btnDelOld_Click(object sender, EventArgs e)
        {
            string path = txtParamPath.Text;
            if (path.Equals(""))
            {
                return;
            }
            FileInfo file = new FileInfo(path);
          
            DialogResult result = MessageBox.Show(sureDelete +file.Name+ "", title, MessageBoxButtons.YesNo);
            if (result.Equals(DialogResult.Yes))
            {
                File.Delete(path);
            }
        }

        private void chbHalcon_CheckedChanged(object sender, EventArgs e)
        {
            if (chbHalcon.Checked)
            {
                cmbHalconCamera.Visible = true;
                cmbCamera.Visible = false;
            }
            else
            { 
                cmbHalconCamera.Visible = false ;
                cmbCamera.Visible = true ;
            }
        }
    }
}