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