FrmCodeLearn.cs 10.0 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 HObject GetCameraImg()
        {
            HObject ho_image = null;
            //Bitmap bitmap = null;
            int index = cmbCamera.SelectedIndex;
            string camerName = cmbCamera.Text;
            if (index < 0)
            {
                MessageBox.Show(selCamera);
                return null;
            }
            ho_image= Camera._cam.CaptureOnImage(camerName );
            return ho_image;
        }
        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(); 
                    HObject ho_Image = GetCameraImg();
                    if (ho_Image != null)
                    {
                        HDLogUtil.info("从相机【" + cmbCamera.Text + "】获取到一张图片");
                        ClearPicImg();
                        //pictureBox1.Image = (Image)bitmap.Clone();
                        //HObject hoImage = HDCodeHelper.Bitmap2HObjectBpp24(bitmap);
                        HDCodeLearnHelper.DefaultImage = ho_Image;
                        ShowImage(ho_Image);
                    }
                    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,out Image);
                HDCodeLearnHelper.DefaultImage = Image;
                ShowImage(Image);
            }
            Task.Factory.StartNew(delegate ()
            {
                HDCodeLearnHelper.StartLearn(this.hWindowControl1.HalconWindow, cameraName, codeType, filePath, count,5000);
            });
            FormStatus(true);
        }
        private void LoadCamera()
        { 
            cmbCamera.Items.Clear();
            if (Camera._cam.Name == null)
                return;
            foreach (string str in Camera._cam.Name)
            {
                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 ClearPicImg()
        {
            try
            {
                if (pictureBox1.Image != null)
                {
                    pictureBox1.Image.Dispose();
                    pictureBox1.Image = null;
                }
            }
            catch (Exception ex)
            {
                HDLogUtil.error("ClearPicImg error : " + ex.ToString());
            }
        }
        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;*.png;*.bmp)|*.jpg;*.png;*.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);
            }
            ClearPicImg();
            //读取图片内容
            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 ;
            }
        }
        public void ShowImage(HObject ho_Image)
        {
            HTuple width, height;
            HOperatorSet.GetImageSize(ho_Image, out width, out height);

            int dWidth = (int)width.D;
            int dHeight = (int)height.D;
            this.hWindowControl1.HalconWindow.SetPart(0, 0, dHeight, dWidth);
            HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow);
        }
    }
}