FrmSetting.cs 10.1 KB
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Asa.Camera
{
    public partial class FrmSetting : Form
    {
        private string path;
        private List<CameraRegion> cameraRegions;

        public FrmSetting()
        {
            InitializeComponent();
        }

        private void GetConfig(string path)
        {
            DgvIPCamera.Rows.Clear();
            LstCamera.Items.Clear();
            LstRegion.Items.Clear();
            cameraRegions = new();

            string json = System.IO.File.ReadAllText(path);
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new();
            Dictionary<string, object> dic = (Dictionary<string, object>)serializer.DeserializeObject(json);

            if (dic.TryGetValue("CodeOrder", out object value))
                LstCodeOrder.Text = value.ToString();
            if (dic.TryGetValue("Halcon", out value))
                Config_Halcon(value);
            if (dic.TryGetValue("EyemLib", out value))
                Config_EyemLib(value);
            if (dic.TryGetValue("Region", out value))
                Config_Region(value);
            if (dic.TryGetValue("HIKIPCamera", out value))
                Config_HIKIPCamera(value);
          
        }

        private void SaveConfig(string path)
        {
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new();
            Dictionary<string, object> dic = new();

            dic.Add("CodeOrder", LstCodeOrder.Text);

            dic.Add("Halcon", new Dictionary<string, object>
            {
                { "CodeType", LstCodeType1.Text },
                { "Zoom1DCode", NudZoom1DCode.Value },
                { "Zoom2DCode", NudZoom2DCode.Value }
            });

            dic.Add("EyemLib", new Dictionary<string, object>
            {
                { "CodeType", LstCodeType2.Text },
                { "BlockSize", NudBlockSize.Value },
                { "RangeC", NudRangeC.Value },
                { "SymbolMin", NudSymbolMin.Value },
                { "SymbolMax", NudSymbolMax.Value }
            });

            object[] obj = new object[cameraRegions.Count];
            for (int i = 0; i < obj.Length; i++)
            {
                obj[i] = new Dictionary<string, object>
                {
                    { "CameraName", cameraRegions[i].CameraName },
                    { "RegionName", cameraRegions[i].RegionName },
                    { "X", cameraRegions[i].X },
                    { "Y", cameraRegions[i].Y },
                    { "Width", cameraRegions[i].Width },
                    { "Height", cameraRegions[i].Height },
                    { "Ratio", cameraRegions[i].Ratio }
                };
            }
            dic.Add("Region", obj);

            obj = new object[DgvIPCamera.Rows.Count - 1];
            for (int i = 0; i < obj.Length; i++)
            {
                obj[i] = new Dictionary<string, object>
                {
                    { "Name", DgvIPCamera.Rows[i].Cells[0].Value },
                    { "IP", DgvIPCamera.Rows[i].Cells[1].Value },
                    { "Port", DgvIPCamera.Rows[i].Cells[2].Value },
                    { "User", DgvIPCamera.Rows[i].Cells[3].Value },
                    { "Pwd", DgvIPCamera.Rows[i].Cells[4].Value }
                };
            }
            dic.Add("HIKIPCamera", obj);

            string json = serializer.Serialize(dic);
            System.IO.File.WriteAllText(path, json, Encoding.UTF8);
            MessageBox.Show("保存成功!", "保存", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void Config_HIKIPCamera(object value)
        {
            object[] obj = (object[])value;
            for (int i = 0; i < obj.Length; i++)
            {
                string[] info = new string[5];
                Dictionary<string, object> param = (Dictionary<string, object>)obj[i];
                if (param.TryGetValue("Name", out value))
                    info[0] = value.ToString();
                if (param.TryGetValue("IP", out value))
                    info[1] = value.ToString();
                if (param.TryGetValue("Port", out value))
                    info[2] = value.ToString();
                if (param.TryGetValue("User", out value))
                    info[3] = value.ToString();
                if (param.TryGetValue("Pwd", out value))
                    info[4] = value.ToString();
                DgvIPCamera.Rows.Add(info);
            }
        }

        private void Config_Region(object value)
        {
            object[] obj = (object[])value;
            for (int i = 0; i < obj.Length; i++)
            {
                Dictionary<string, object> param = (Dictionary<string, object>)obj[i];
                CameraRegion region = new();

                if (param.TryGetValue("CameraName", out value))
                    region.CameraName = value.ToString();
                if (param.TryGetValue("RegionName", out value))
                    region.RegionName = value.ToString();
                if (param.TryGetValue("X", out value))
                    region.X = Convert.ToInt32(value);
                if (param.TryGetValue("Y", out value))
                    region.Y = Convert.ToInt32(value);
                if (param.TryGetValue("Width", out value))
                   region.Width = Convert.ToInt32(value);
                if (param.TryGetValue("Height", out value))
                   region.Height = Convert.ToInt32(value);
                if (param.TryGetValue("Ratio", out value))
                   region.Ratio = Convert.ToSingle(value);
                cameraRegions.Add(region);
            }
        }

        private void Config_Halcon(object value)
        {
            Dictionary<string, object> param = (Dictionary<string, object>)value;
            if (param.TryGetValue("CodeType", out value))
                LstCodeType1.Text = value.ToString();
            if (param.TryGetValue("Zoom1DCode", out value))
                NudZoom1DCode.Value = Convert.ToDecimal(value);
            if (param.TryGetValue("Zoom2DCode", out value))
                NudZoom2DCode.Value = Convert.ToDecimal(value);
        }

        private void Config_EyemLib(object value)
        {
            Dictionary<string, object> param = (Dictionary<string, object>)value;
            if (param.TryGetValue("CodeType", out value))
                LstCodeType2.Text = value.ToString();
            if (param.TryGetValue("BlockSize", out value))
                NudBlockSize.Value = Convert.ToInt32(value);
            if (param.TryGetValue("RangeC", out value))
                NudRangeC.Value = Convert.ToInt32(value);
            if (param.TryGetValue("SymbolMin", out value))
                NudSymbolMin.Value = Convert.ToInt32(value);
            if (param.TryGetValue("SymbolMax", out value))
                NudSymbolMax.Value = Convert.ToInt32(value);
        }




        private void FrmSetting_Load(object sender, EventArgs e)
        {
            Version version = new(ProductVersion);
            Text += "  " + version.ToString();

            string[] order = Enum.GetNames(typeof(Barcode.CodeOrder)).ToArray();
            LstCodeOrder.Items.AddRange(order);
            LstCodeOrder.SelectedIndex = 0;
            order = Enum.GetNames(typeof(Barcode.CodeType)).ToArray();
            LstCodeType1.Items.AddRange(order);
            LstCodeType1.SelectedIndex = 0;
            LstCodeType2.Items.AddRange(order);
            LstCodeType2.SelectedIndex = 0;
        }

        private void FrmSetting_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (Common.visionLib != null)
                Common.visionLib.Dispose();
        }

        private void BtnLoad_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new() { Filter = "JSON File|*.json" };
            if (dlg.ShowDialog() != DialogResult.OK) return;

            path = dlg.FileName;
            GetConfig(path);
            LblPath.Text = "路径:" + path;
            //Common.visionLib = new VisionLib(path);
            //LstCamera.Items.Clear();
            //LstCamera.Items.AddRange(Common.visionLib.GetCameraName());
        }

        private void BtnSave_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(path)) return;
            SaveConfig(path);
        }

        private void BtnExport_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlg = new() { Filter = "JSON File|*.json" };
            if (dlg.ShowDialog() != DialogResult.OK) return;
            SaveConfig(dlg.FileName);
        }

        private void BtnExit_Click(object sender, EventArgs e)
        {

            Close();
        }

        private void BtnLoadCamera_Click(object sender, EventArgs e)
        {
            if (Common.visionLib != null)
                Common.visionLib.Dispose();
            Common.visionLib = new VisionLib(path);
            LstCamera.Items.Clear();
            LstRegion.Items.Clear();
            LstCamera.Items.AddRange(Common.visionLib.GetCameraName());
        }

        private void BtnOpenCamera_Click(object sender, EventArgs e)
        {
            if (LstCamera.SelectedIndex == -1) return;
            List<CameraRegion> regions = cameraRegions.FindAll(match => match.CameraName == LstCamera.Text);
            FrmOpenCamera frm = new(LstCamera.Text, regions);
            if (frm.ShowDialog() == DialogResult.Cancel) return;

            cameraRegions.RemoveAll(match => match.CameraName == LstCamera.Text);
            cameraRegions.AddRange(frm.regions);
            LstCamera_SelectedIndexChanged(null, EventArgs.Empty);
        }

        private void LstCamera_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (LstCamera.SelectedIndex == -1) return;
            LstRegion.Items.Clear();
            List<CameraRegion> regions = cameraRegions.FindAll(match => match.CameraName == LstCamera.Text);
            for (int i = 0; i < regions.Count; i++)
                LstRegion.Items.Add(regions[i].ToString());
        }


    }
}