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 PaintDotNet.Camera; using System.Threading; using PaintDotNet.ImageCollect; namespace PaintDotNet.Preview2 { public partial class WhiteBalanceControl : UserControl { private ICamera _camera => CameraManager.CurrentCamera; private CameraParamModel.ParameterSets _settings { get { return CameraConfigs.Settings; } } private int _delay = 500; private void InitializeLanguageText() { this.groupBox3.Text = PdnResources.GetString("Menu.Image.WhiteBalance.Text"); this.label12.Text = PdnResources.GetString("Menu.Blue.text"); this.label11.Text = PdnResources.GetString("Menu.green.text"); this.label1.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.btnAuto.Text = PdnResources.GetString("Menu.auto.text"); this.btnManual.Text = PdnResources.GetString("Menu.Manual.text"); } public WhiteBalanceControl() { InitializeComponent(); } public void Initialize() { InitializeLanguageText(); InitializeControlData(); } private void InitializeControlData() { if (_camera.IsOpen()) { var range = _camera.GetColorChannelRang(1); tkbRed.Minimum = (int)range.Min; tkbRed.Maximum = (int)range.Max; tkbRed.Tag = range; range = _camera.GetColorChannelRang(2); tkbGreen.Minimum = (int)range.Min; tkbGreen.Maximum = (int)range.Max; tkbGreen.Tag = range; range = _camera.GetColorChannelRang(3); tkbBlue.Minimum = (int)range.Min; tkbBlue.Maximum = (int)range.Max; tkbBlue.Tag = range; range = _camera.GetColorTemperatureRange(); // 颜色值 int redChannelValue = (int)_settings.RedChannel; if (redChannelValue >= this.tkbRed.Minimum && redChannelValue <= this.tkbRed.Maximum) { this.tkbRed.Value = redChannelValue; } int greenChannelValue = (int)_settings.GreenChannel; if (greenChannelValue >= this.tkbGreen.Minimum && greenChannelValue <= this.tkbGreen.Maximum) { this.tkbGreen.Value = greenChannelValue; } int blueChannelValue = (int)_settings.BlueChannel; if (blueChannelValue >= this.tkbBlue.Minimum && blueChannelValue <= this.tkbBlue.Maximum) { this.tkbBlue.Value = blueChannelValue; } AutoWhiteBalance(_settings.WhiteBalance == 1); } } public void UpdateDisplay() { btnAuto.Enabled = _settings.WhiteBalance != 1; btnManual.Enabled = _settings.WhiteBalance == 1; pnlColor.Enabled = _settings.WhiteBalance == 0; } /// /// 是否自动白平衡 修改显示样式 /// 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.tkbRed.Value = (int)_settings.RedChannel; this.tkbGreen.Value = (int)_settings.GreenChannel; this.tkbBlue.Value = (int)_settings.BlueChannel; 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 Invoke1(Action action) { try { if (this.IsHandleCreated) { this.Invoke(action); } } catch { } } private void tkbRed_Scroll(object sender, EventArgs e) { _camera.RedGain = tkbRed.Value; _settings.RedChannel = tkbRed.Value; } private void tkbGreen_Scroll(object sender, EventArgs e) { _camera.GreenGain = tkbGreen.Value; _settings.GreenChannel = tkbGreen.Value; } private void tkbBlue_Scroll(object sender, EventArgs e) { _camera.BlueGain = tkbBlue.Value; _settings.BlueChannel = tkbBlue.Value; } } }