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();
}
}
}