diff --git a/DH.Commons/Base/CameraBase.cs b/DH.Commons/Base/CameraBase.cs index 73cf709..047f788 100644 --- a/DH.Commons/Base/CameraBase.cs +++ b/DH.Commons/Base/CameraBase.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using System.Drawing.Imaging; using AntdUI; using DH.Commons.Enums; +using DVPCameraType; using HalconDotNet; using OpenCvSharp; @@ -47,11 +48,13 @@ namespace DH.Commons.Base // 私有字段 + 带通知的属性(与DetectionLabel风格一致) private bool _isEnabled = false; private bool _isallPicEnabled = true;//默认全画幅 + private bool _isRGBEnabled = true;//默认彩色 private bool _isContinueMode = false; private bool _isSavePicEnabled = false; private bool _isZoomCamera = false; private string _imageSaveDirectory; private EnumCamType _CamType; + private dvpStreamFormat _dvpstreamFormat = dvpStreamFormat.S_RGB24; private ImageFormat _imageFormat = ImageFormat.Jpeg; private bool _isHardwareTrigger = true; private string _serialNumber = string.Empty; @@ -71,6 +74,20 @@ namespace DH.Commons.Base public volatile int SnapshotCount = 0; + [Category("相机设置")] + [DisplayName("图像格式")] + [Description("相机采集图像格式")] + public dvpStreamFormat DvpImageFormat + { + get => _dvpstreamFormat; + set + { + if (_dvpstreamFormat == value) return; + _dvpstreamFormat = value; + OnPropertyChanged(nameof(DvpImageFormat)); + } + } + [Category("采图模式")] [DisplayName("连续模式")] [Description("是否连续模式。true:连续模式采图;false:触发模式采图")] diff --git a/DH.Commons/DH.Commons.csproj b/DH.Commons/DH.Commons.csproj index 05fc12a..4771958 100644 --- a/DH.Commons/DH.Commons.csproj +++ b/DH.Commons/DH.Commons.csproj @@ -27,6 +27,9 @@ + + ..\X64\Debug\DVPCameraCS64.dll + ..\x64\Debug\halcondotnet.dll diff --git a/DH.Devices.Camera/Do3ThinkCamera.cs b/DH.Devices.Camera/Do3ThinkCamera.cs index 756ffa6..2e018a7 100644 --- a/DH.Devices.Camera/Do3ThinkCamera.cs +++ b/DH.Devices.Camera/Do3ThinkCamera.cs @@ -27,7 +27,7 @@ namespace DH.Devices.Camera public bool Connected=false; public int m_n_dev_count = 0; private DVPCamera.dvpStreamCallback ImageCallback; - public dvpStreamFormat dvpStreamFormat = dvpStreamFormat.S_RGB24; + // public dvpStreamFormat dvpStreamFormat = dvpStreamFormat.S_RGB24; public int m_CamCount = 0; public Double m_dfDisplayCount = 0; @@ -63,6 +63,8 @@ namespace DH.Devices.Camera { try { + if (CameraName == "Cam1") + Console.WriteLine(""); pCallBackFunc = new DVPCamera.dvpEventCallback(cbExceptiondelegate); nRet = DVPCamera.dvpOpenByUserId(CameraName, dvpOpenMode.OPEN_NORMAL, @@ -74,7 +76,7 @@ namespace DH.Devices.Camera throw new Exception($"Create device failed:{nRet:x8}"); } - nRet = DVPCamera.dvpSetTargetFormat(m_handle, (dvpStreamFormat)dvpStreamFormat); + nRet = DVPCamera.dvpSetTargetFormat(m_handle, (dvpStreamFormat)DvpImageFormat); if (dvpStatus.DVP_STATUS_OK != nRet) { throw new Exception($"Set image format failed:{nRet:x8}"); diff --git a/DHSoftware/MainWindow.cs b/DHSoftware/MainWindow.cs index a0c5378..9c8c596 100644 --- a/DHSoftware/MainWindow.cs +++ b/DHSoftware/MainWindow.cs @@ -524,6 +524,7 @@ namespace DHSoftware cam.CameraIP = cameraBase.CameraIP; cam.IsEnabled = cameraBase.IsEnabled; cam.IsZoomCamera = cameraBase.IsZoomCamera; + cam.DvpImageFormat = cameraBase.DvpImageFormat; cam.Exposure = cameraBase.Exposure; cam.Gain = cameraBase.Gain; cam.RotateImage = cameraBase.RotateImage; diff --git a/DHSoftware/Views/CameraControl.Designer.cs b/DHSoftware/Views/CameraControl.Designer.cs index 4fecb57..753ba65 100644 --- a/DHSoftware/Views/CameraControl.Designer.cs +++ b/DHSoftware/Views/CameraControl.Designer.cs @@ -29,11 +29,12 @@ private void InitializeComponent() { panel3 = new AntdUI.Panel(); - btnSizeAdd = new AntdUI.Button(); - button1 = new AntdUI.Button(); - button2 = new AntdUI.Button(); button3 = new AntdUI.Button(); + button2 = new AntdUI.Button(); + button1 = new AntdUI.Button(); + btnSizeAdd = new AntdUI.Button(); panel4 = new AntdUI.Panel(); + pictureBox1 = new PictureBox(); panel2 = new AntdUI.Panel(); label18 = new AntdUI.Label(); swhEnable = new AntdUI.Switch(); @@ -65,12 +66,13 @@ label14 = new AntdUI.Label(); switch1 = new AntdUI.Switch(); panel1 = new AntdUI.Panel(); - pictureBox1 = new PictureBox(); + sltPicType = new AntdUI.Select(); + label15 = new AntdUI.Label(); panel3.SuspendLayout(); panel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); panel2.SuspendLayout(); panel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); SuspendLayout(); // // panel3 @@ -80,51 +82,12 @@ panel3.Controls.Add(button1); panel3.Controls.Add(btnSizeAdd); panel3.Dock = DockStyle.Bottom; - panel3.Location = new Point(0, 552); + panel3.Location = new Point(0, 585); panel3.Name = "panel3"; panel3.Size = new Size(691, 59); panel3.TabIndex = 39; panel3.Text = "panel3"; // - // btnSizeAdd - // - btnSizeAdd.BorderWidth = 2F; - btnSizeAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); - btnSizeAdd.Ghost = true; - btnSizeAdd.IconRatio = 0F; - btnSizeAdd.IconSvg = ""; - btnSizeAdd.Location = new Point(75, 13); - btnSizeAdd.Name = "btnSizeAdd"; - btnSizeAdd.Size = new Size(80, 38); - btnSizeAdd.TabIndex = 43; - btnSizeAdd.Text = "连接相机"; - // - // button1 - // - button1.BorderWidth = 2F; - button1.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); - button1.Ghost = true; - button1.IconRatio = 0F; - button1.IconSvg = ""; - button1.Location = new Point(233, 13); - button1.Name = "button1"; - button1.Size = new Size(80, 38); - button1.TabIndex = 44; - button1.Text = "断开相机"; - // - // button2 - // - button2.BorderWidth = 2F; - button2.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); - button2.Ghost = true; - button2.IconRatio = 0F; - button2.IconSvg = ""; - button2.Location = new Point(388, 13); - button2.Name = "button2"; - button2.Size = new Size(80, 38); - button2.TabIndex = 45; - button2.Text = "单次触发"; - // // button3 // button3.BorderWidth = 2F; @@ -138,16 +101,65 @@ button3.TabIndex = 46; button3.Text = "连续触发"; // + // button2 + // + button2.BorderWidth = 2F; + button2.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + button2.Ghost = true; + button2.IconRatio = 0F; + button2.IconSvg = ""; + button2.Location = new Point(388, 13); + button2.Name = "button2"; + button2.Size = new Size(80, 38); + button2.TabIndex = 45; + button2.Text = "单次触发"; + // + // button1 + // + button1.BorderWidth = 2F; + button1.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + button1.Ghost = true; + button1.IconRatio = 0F; + button1.IconSvg = ""; + button1.Location = new Point(233, 13); + button1.Name = "button1"; + button1.Size = new Size(80, 38); + button1.TabIndex = 44; + button1.Text = "断开相机"; + // + // btnSizeAdd + // + btnSizeAdd.BorderWidth = 2F; + btnSizeAdd.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134); + btnSizeAdd.Ghost = true; + btnSizeAdd.IconRatio = 0F; + btnSizeAdd.IconSvg = ""; + btnSizeAdd.Location = new Point(75, 13); + btnSizeAdd.Name = "btnSizeAdd"; + btnSizeAdd.Size = new Size(80, 38); + btnSizeAdd.TabIndex = 43; + btnSizeAdd.Text = "连接相机"; + // // panel4 // panel4.Controls.Add(pictureBox1); panel4.Dock = DockStyle.Fill; panel4.Location = new Point(0, 0); panel4.Name = "panel4"; - panel4.Size = new Size(691, 552); + panel4.Size = new Size(691, 585); panel4.TabIndex = 40; panel4.Text = "panel4"; // + // pictureBox1 + // + pictureBox1.BorderStyle = BorderStyle.FixedSingle; + pictureBox1.Dock = DockStyle.Fill; + pictureBox1.Location = new Point(0, 0); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(691, 585); + pictureBox1.TabIndex = 39; + pictureBox1.TabStop = false; + // // panel2 // panel2.Controls.Add(panel4); @@ -155,7 +167,7 @@ panel2.Dock = DockStyle.Fill; panel2.Location = new Point(218, 0); panel2.Name = "panel2"; - panel2.Size = new Size(691, 611); + panel2.Size = new Size(691, 644); panel2.TabIndex = 49; panel2.Text = "panel2"; // @@ -172,7 +184,7 @@ swhEnable.CheckedText = "启用"; swhEnable.Location = new Point(86, 9); swhEnable.Name = "swhEnable"; - swhEnable.Size = new Size(94, 33); + swhEnable.Size = new Size(111, 33); swhEnable.TabIndex = 49; swhEnable.UnCheckedText = "关闭"; // @@ -204,7 +216,7 @@ // iptExposure.Location = new Point(86, 136); iptExposure.Name = "iptExposure"; - iptExposure.Size = new Size(94, 36); + iptExposure.Size = new Size(111, 36); iptExposure.TabIndex = 53; iptExposure.Tag = ""; iptExposure.Text = "0"; @@ -213,7 +225,7 @@ // iptGain.Location = new Point(86, 179); iptGain.Name = "iptGain"; - iptGain.Size = new Size(94, 36); + iptGain.Size = new Size(111, 36); iptGain.TabIndex = 54; iptGain.Text = "0"; // @@ -223,7 +235,7 @@ iptRevolve.List = true; iptRevolve.Location = new Point(86, 222); iptRevolve.Name = "iptRevolve"; - iptRevolve.Size = new Size(94, 36); + iptRevolve.Size = new Size(111, 36); iptRevolve.TabIndex = 55; // // label4 @@ -239,7 +251,7 @@ sltAcquisitionMode.List = true; sltAcquisitionMode.Location = new Point(86, 265); sltAcquisitionMode.Name = "sltAcquisitionMode"; - sltAcquisitionMode.Size = new Size(94, 36); + sltAcquisitionMode.Size = new Size(111, 36); sltAcquisitionMode.TabIndex = 57; // // label5 @@ -255,12 +267,12 @@ sltTriggerMode.List = true; sltTriggerMode.Location = new Point(86, 310); sltTriggerMode.Name = "sltTriggerMode"; - sltTriggerMode.Size = new Size(94, 36); + sltTriggerMode.Size = new Size(111, 36); sltTriggerMode.TabIndex = 59; // // label7 // - label7.Location = new Point(3, 498); + label7.Location = new Point(3, 538); label7.Name = "label7"; label7.Size = new Size(29, 23); label7.TabIndex = 60; @@ -268,34 +280,34 @@ // // iptROIX // - iptROIX.Location = new Point(86, 430); + iptROIX.Location = new Point(86, 470); iptROIX.Name = "iptROIX"; - iptROIX.Size = new Size(94, 37); + iptROIX.Size = new Size(111, 37); iptROIX.TabIndex = 61; iptROIX.Tag = ""; iptROIX.Text = "0"; // // iptROIY // - iptROIY.Location = new Point(86, 473); + iptROIY.Location = new Point(86, 513); iptROIY.Name = "iptROIY"; - iptROIY.Size = new Size(94, 37); + iptROIY.Size = new Size(111, 37); iptROIY.TabIndex = 62; iptROIY.Text = "0"; // // iptROIW // - iptROIW.Location = new Point(86, 516); + iptROIW.Location = new Point(86, 556); iptROIW.Name = "iptROIW"; - iptROIW.Size = new Size(94, 37); + iptROIW.Size = new Size(111, 37); iptROIW.TabIndex = 63; iptROIW.Text = "0"; // // iptROIH // - iptROIH.Location = new Point(86, 559); + iptROIH.Location = new Point(86, 599); iptROIH.Name = "iptROIH"; - iptROIH.Size = new Size(94, 37); + iptROIH.Size = new Size(111, 37); iptROIH.TabIndex = 64; iptROIH.Text = "0"; // @@ -312,13 +324,13 @@ sthPic.CheckedText = "启用"; sthPic.Location = new Point(86, 56); sthPic.Name = "sthPic"; - sthPic.Size = new Size(94, 33); + sthPic.Size = new Size(111, 33); sthPic.TabIndex = 66; sthPic.UnCheckedText = "关闭"; // // label8 // - label8.Location = new Point(36, 430); + label8.Location = new Point(36, 470); label8.Name = "label8"; label8.Size = new Size(29, 37); label8.TabIndex = 67; @@ -326,7 +338,7 @@ // // label9 // - label9.Location = new Point(36, 473); + label9.Location = new Point(36, 513); label9.Name = "label9"; label9.Size = new Size(29, 37); label9.TabIndex = 68; @@ -334,7 +346,7 @@ // // label10 // - label10.Location = new Point(28, 516); + label10.Location = new Point(28, 556); label10.Name = "label10"; label10.Size = new Size(44, 37); label10.TabIndex = 69; @@ -342,7 +354,7 @@ // // label11 // - label11.Location = new Point(28, 560); + label11.Location = new Point(28, 600); label11.Name = "label11"; label11.Size = new Size(44, 36); label11.TabIndex = 70; @@ -350,7 +362,7 @@ // // label12 // - label12.Location = new Point(21, 362); + label12.Location = new Point(21, 402); label12.Name = "label12"; label12.Size = new Size(59, 23); label12.TabIndex = 71; @@ -359,9 +371,9 @@ // sthAllPic // sthAllPic.CheckedText = "启用"; - sthAllPic.Location = new Point(86, 352); + sthAllPic.Location = new Point(86, 392); sthAllPic.Name = "sthAllPic"; - sthAllPic.Size = new Size(94, 33); + sthAllPic.Size = new Size(111, 33); sthAllPic.TabIndex = 72; sthAllPic.UnCheckedText = "关闭"; // @@ -378,12 +390,12 @@ sltCamType.List = true; sltCamType.Location = new Point(86, 93); sltCamType.Name = "sltCamType"; - sltCamType.Size = new Size(94, 36); + sltCamType.Size = new Size(111, 36); sltCamType.TabIndex = 74; // // label14 // - label14.Location = new Point(21, 401); + label14.Location = new Point(21, 441); label14.Name = "label14"; label14.Size = new Size(59, 23); label14.TabIndex = 75; @@ -392,14 +404,16 @@ // switch1 // switch1.CheckedText = "启用"; - switch1.Location = new Point(86, 391); + switch1.Location = new Point(86, 431); switch1.Name = "switch1"; - switch1.Size = new Size(94, 33); + switch1.Size = new Size(111, 33); switch1.TabIndex = 76; switch1.UnCheckedText = "关闭"; // // panel1 // + panel1.Controls.Add(sltPicType); + panel1.Controls.Add(label15); panel1.Controls.Add(switch1); panel1.Controls.Add(label14); panel1.Controls.Add(sltCamType); @@ -432,19 +446,25 @@ panel1.Dock = DockStyle.Left; panel1.Location = new Point(0, 0); panel1.Name = "panel1"; - panel1.Size = new Size(218, 611); + panel1.Size = new Size(218, 644); panel1.TabIndex = 48; panel1.Text = "panel1"; // - // pictureBox1 + // sltPicType // - pictureBox1.BorderStyle = BorderStyle.FixedSingle; - pictureBox1.Dock = DockStyle.Fill; - pictureBox1.Location = new Point(0, 0); - pictureBox1.Name = "pictureBox1"; - pictureBox1.Size = new Size(691, 552); - pictureBox1.TabIndex = 39; - pictureBox1.TabStop = false; + sltPicType.List = true; + sltPicType.Location = new Point(86, 352); + sltPicType.Name = "sltPicType"; + sltPicType.Size = new Size(111, 36); + sltPicType.TabIndex = 78; + // + // label15 + // + label15.Location = new Point(21, 352); + label15.Name = "label15"; + label15.Size = new Size(59, 36); + label15.TabIndex = 77; + label15.Text = "图片格式"; // // CameraControl // @@ -453,12 +473,12 @@ Controls.Add(panel2); Controls.Add(panel1); Name = "CameraControl"; - Size = new Size(909, 611); + Size = new Size(909, 644); panel3.ResumeLayout(false); panel4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); panel2.ResumeLayout(false); panel1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); ResumeLayout(false); } @@ -502,5 +522,7 @@ private AntdUI.Label label14; private AntdUI.Switch switch1; private AntdUI.Panel panel1; + private AntdUI.Select sltPicType; + private AntdUI.Label label15; } } diff --git a/DHSoftware/Views/CameraControl.cs b/DHSoftware/Views/CameraControl.cs index d348e97..a28d1b1 100644 --- a/DHSoftware/Views/CameraControl.cs +++ b/DHSoftware/Views/CameraControl.cs @@ -10,6 +10,7 @@ using System.Windows.Forms; using AntdUI; using DH.Commons.Base; using DH.Commons.Enums; +using DVPCameraType; using static System.Windows.Forms.VisualStyles.VisualStyleElement; using Window = AntdUI.Window; @@ -26,9 +27,36 @@ namespace DHSoftware.Views InitializeComponent(); sltCamType.TextChanged += SltCamTpye_TextChanged; + sltPicType.TextChanged += SltPicTpye_TextChanged; InitData(); BindData(); } + private void SltPicTpye_TextChanged(object? sender, EventArgs e) + { + if (sender is Select slt && !string.IsNullOrEmpty(slt.Text)) + { + // 将文本转换为枚举值 + if (Enum.TryParse(slt.Text, out var plcType)) + { + switch (plcType) + { + case dvpStreamFormat.S_RGB24: + case dvpStreamFormat.S_MONO8: + + break; + + + + default: + break; + } + } + else + { + + } + } + } private void SltCamTpye_TextChanged(object? sender, EventArgs e) { if (sender is Select slt && !string.IsNullOrEmpty(slt.Text)) @@ -77,6 +105,7 @@ namespace DHSoftware.Views { sltCamType.DataBindings.Add("Text", CameraBase, "CamType", true, DataSourceUpdateMode.OnPropertyChanged, ""); + sltPicType.DataBindings.Add("Text", CameraBase, "DvpImageFormat", true, DataSourceUpdateMode.OnPropertyChanged, ""); sthPic.DataBindings.Add(nameof(sthPic.Checked), CameraBase, nameof(CameraBase.IsSavePicEnabled), true, DataSourceUpdateMode.OnPropertyChanged); sthAllPic.DataBindings.Add(nameof(sthAllPic.Checked), CameraBase, nameof(CameraBase.IsAllPicEnabled), @@ -126,9 +155,15 @@ namespace DHSoftware.Views { sltCamType.Items.Add(value.ToString()); } + sltPicType.Items.Clear(); + foreach (dvpStreamFormat value in Enum.GetValues(typeof(dvpStreamFormat))) + { + sltPicType.Items.Add(value.ToString()); + } // 初始化下拉框选项 sltAcquisitionMode.Items.AddRange(new[] { "连续模式", "触发模式" }); sltTriggerMode.Items.AddRange(new[] { "软触发", "硬触发" }); + // 设置初始选择 sltAcquisitionMode.SelectedIndex = CameraBase.IsContinueMode ? 0 : 1;