| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 | 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;            }        }        /// <summary>        /// 是否自动白平衡 修改显示样式        /// </summary>        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;        }        /// <summary>        /// 白平衡模式切换        /// </summary>        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();        }    }}
 |