using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using PaintDotNet.Base.SettingModel; using System.Threading; using PaintDotNet.Camera; namespace PaintDotNet.ImageCollect { public partial class AdjustWhiteBalanceControl : UserControl { private ICamera _camera; private CameraParamModel.ParameterSets _settings; private bool m_use; private int _delay = 500; private void InitializeLanguageText() { this.groupBox3.Text = PdnResources.GetString("Menu.Image.WhiteBalance.Text"); this.btnOnce.Text = PdnResources.GetString("Menu.Primarywhitebalance.Text"); this.label12.Text = PdnResources.GetString("Menu.Blue.text"); this.label11.Text = PdnResources.GetString("Menu.green.text"); this.label10.Text = PdnResources.GetString("Menu.red.text"); this.label9.Text = PdnResources.GetString("Menu.yellow.text"); this.label8.Text = PdnResources.GetString("Menu.Magenta.text"); this.label7.Text = PdnResources.GetString("Menu.aqua.text"); this.ckbColor.Text = PdnResources.GetString("Menu.Displaycolorvaluechannel.text"); this.btnAuto.Text = PdnResources.GetString("Menu.auto.text"); this.btnManual.Text = PdnResources.GetString("Menu.Manual.text"); } public AdjustWhiteBalanceControl() { InitializeComponent(); } public void Initialize(CameraParamModel model, bool use) { _settings = model.parame; m_use = use; _camera = CameraManager.CurrentCamera; InitializeLanguageText(); InitializeControlData(); } private void InitializeControlData() { if (_camera.IsOpen()) { Range range = _camera.GetColorChannelRang(1); tbrRed.SetRange((int)range.Min, (int)range.Max); tbrRed.Tag = range; range = _camera.GetColorChannelRang(2); tbrGreen.SetRange((int)range.Min, (int)range.Max); tbrGreen.Tag = range; range = _camera.GetColorChannelRang(3); tbrBlue.SetRange((int)range.Min, (int)range.Max); tbrBlue.Tag = range; range = _camera.GetColorTemperatureRange(); tbrCT.SetRange((int)range.Min, (int)range.Max); tbrCT.Tag = range; // 颜色值 int redChannelValue = (int)_settings.RedChannel; if (redChannelValue >= this.tbrRed.Minimum && redChannelValue <= this.tbrRed.Maximum) { this.tbrRed.Value = redChannelValue; } int greenChannelValue = (int)_settings.GreenChannel; if (greenChannelValue >= this.tbrGreen.Minimum && greenChannelValue <= this.tbrGreen.Maximum) { this.tbrGreen.Value = greenChannelValue; } int blueChannelValue = (int)_settings.BlueChannel; if (blueChannelValue >= this.tbrBlue.Minimum && blueChannelValue <= this.tbrBlue.Maximum) { this.tbrBlue.Value = blueChannelValue; } // 白平衡 if (_settings.WhiteBalance == 1) { AutoWhiteBalance(true); } else { AutoWhiteBalance(false); } // 显示颜色值通道 this.ckbColor.Checked = _settings.ShowColorPBoxFlag == 1; } } /// /// 是否自动白平衡 修改显示样式 /// private void AutoWhiteBalance(Boolean isWhiteBalance) { _camera.WhiteBalanceMode = isWhiteBalance ? 2 : 0; pnlColor.Enabled = !isWhiteBalance; _settings.WhiteBalance = isWhiteBalance ? 1 : 0; new Thread(() => { Thread.Sleep(_delay); this.Invoke1(() => { UpdateColorTemperature(); }); }).Start(); } private void UpdateColorTemperature() { _settings.RedChannel = _camera.RedGain; _settings.GreenChannel = _camera.GreenGain; _settings.BlueChannel = _camera.BlueGain; var cct = _camera.ColorTemperature; _settings.Temperature = cct; this.tbrRed.Value = (int)_settings.RedChannel; this.tbrGreen.Value = (int)_settings.GreenChannel; this.tbrBlue.Value = (int)_settings.BlueChannel; tbrCT.Value = (int)cct; lblCT.Text = (cct + 20) * 100 + "K"; btnAuto.Enabled = _settings.WhiteBalance != 1; btnManual.Enabled = _settings.WhiteBalance == 1; } /// /// 白平衡模式切换 /// private void Manual_Click(object sender, EventArgs e) { if (sender == btnManual) AutoWhiteBalance(false); if (sender == btnAuto) AutoWhiteBalance(true); } private void Once_Click(object sender, EventArgs e) { _camera.WhiteBalanceMode = 2; new Thread(() => { Thread.Sleep(_delay); this.Invoke1(() => { AutoWhiteBalance(false); }); }).Start(); } private void button4_Click(object sender, EventArgs e) { var colorTemperatureString = (sender as Button).Text; colorTemperatureString = colorTemperatureString.ToUpper().Replace("K", ""); int cct = (int.Parse(colorTemperatureString) / 100) - 20; _camera.ColorTemperature = cct; AutoWhiteBalance(false); } private void redChannelTB_ValueChanged(object sender, EventArgs e) { _settings.RedChannel = ((TrackBar)sender).Value; _camera.RedGain = _settings.RedChannel; UpdateColorTemperature(); } private void greenChannelTB_ValueChanged(object sender, EventArgs e) { _settings.GreenChannel = ((TrackBar)sender).Value; _camera.GreenGain = _settings.GreenChannel; UpdateColorTemperature(); } private void blueChannelTB_ValueChanged(object sender, EventArgs e) { _settings.BlueChannel = ((TrackBar)sender).Value; _camera.BlueGain = _settings.BlueChannel; UpdateColorTemperature(); } private void xianshiColourCheckBox_CheckedChanged(object sender, EventArgs e) { CheckBox cb = (CheckBox)sender; this.colorFuchsia.Visible = cb.Checked; this.colorBlue.Visible = cb.Checked; this.colorRed.Visible = cb.Checked; this.colorYellow.Visible = cb.Checked; this.colorCyan.Visible = cb.Checked; this.colorGreen.Visible = cb.Checked; this._settings.ShowColorPBoxFlag = cb.Checked ? 1 : 0; } private void Invoke1(Action action) { try { if (this.IsHandleCreated) { this.Invoke(action); } } catch { } } private void tbrCT_Scroll(object sender, EventArgs e) { _camera.ColorTemperature = tbrCT.Value; UpdateColorTemperature(); } } }