using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using AForge;
using AForge.Math;
using AForge.Imaging;
using AForge.Imaging.Filters;
namespace IPLab
{
/// <summary>
/// Summary description for YCbCrFilteringForm.
/// </summary>
public class YCbCrFilteringForm : System.Windows.Forms.Form
{
private YCbCrFiltering filter = new YCbCrFiltering( );
private DoubleRange yRange = new DoubleRange( 0, 1 );
private DoubleRange cbRange = new DoubleRange( -0.5, 0.5 );
private DoubleRange crRange = new DoubleRange( -0.5, 0.5 );
private double fillY = 0, fillCb = 0, fillCr = 0;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox minYBox;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox maxYBox;
private IPLab.ColorSlider ySlider;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox minCbBox;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox maxCbBox;
private IPLab.ColorSlider cbSlider;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private IPLab.ColorSlider crSlider;
private System.Windows.Forms.TextBox maxCrBox;
private System.Windows.Forms.TextBox minCrBox;
private System.Windows.Forms.GroupBox groupBox4;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox fillYBox;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox fillCbBox;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.TextBox fillCrBox;
private System.Windows.Forms.GroupBox groupBox5;
private IPLab.FilterPreview filterPreview;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.ComboBox fillTypeCombo;
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.Button cancelButton;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public Bitmap Image
{
set { filterPreview.Image = value; }
}
// Filter property
public IFilter Filter
{
get { return filter; }
}
// Constructor
public YCbCrFilteringForm( )
{
//
// Required for Windows Form Designer support
//
InitializeComponent( );
//
minYBox.Text = yRange.Min.ToString( "F3" );
maxYBox.Text = yRange.Max.ToString( "F3" );
fillYBox.Text = fillY.ToString( "F3" );
minCbBox.Text = cbRange.Min.ToString( "F3" );
maxCbBox.Text = cbRange.Max.ToString( "F3" );
fillCbBox.Text = fillCb.ToString( "F3" );
minCrBox.Text = crRange.Min.ToString( "F3" );
maxCrBox.Text = crRange.Max.ToString( "F3" );
fillCrBox.Text = fillCr.ToString( "F3" );
fillTypeCombo.SelectedIndex = 0;
filterPreview.Filter = filter;
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose( );
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent( )
{
this.groupBox1 = new System.Windows.Forms.GroupBox( );
this.ySlider = new IPLab.ColorSlider( );
this.maxYBox = new System.Windows.Forms.TextBox( );
this.label2 = new System.Windows.Forms.Label( );
this.minYBox = new System.Windows.Forms.TextBox( );
this.label1 = new System.Windows.Forms.Label( );
this.groupBox2 = new System.Windows.Forms.GroupBox( );
this.cbSlider = new IPLab.ColorSlider( );
this.maxCbBox = new System.Windows.Forms.TextBox( );
this.label4 = new System.Windows.Forms.Label( );
this.minCbBox = new System.Windows.Forms.TextBox( );
this.label3 = new System.Windows.Forms.Label( );
this.groupBox3 = new System.Windows.Forms.GroupBox( );
this.crSlider = new IPLab.ColorSlider( );
this.maxCrBox = new System.Windows.Forms.TextBox( );
this.label5 = new System.Windows.Forms.Label( );
this.minCrBox = new System.Windows.Forms.TextBox( );
this.label6 = new System.Windows.Forms.Label( );
this.groupBox4 = new System.Windows.Forms.GroupBox( );
this.fillCrBox = new System.Windows.Forms.TextBox( );
this.label9 = new System.Windows.Forms.Label( );
this.fillCbBox = new System.Windows.Forms.TextBox( );
this.label8 = new System.Windows.Forms.Label( );
this.fillYBox = new System.Windows.Forms.TextBox( );
this.label7 = new System.Windows.Forms.Label( );
this.groupBox5 = new System.Windows.Forms.GroupBox( );
this.filterPreview = new IPLab.FilterPreview( );
this.label10 = new System.Windows.Forms.Label( );
this.fillTypeCombo = new System.Windows.Forms.ComboBox( );
this.okButton = new System.Windows.Forms.Button( );
this.cancelButton = new System.Windows.Forms.Button( );
this.groupBox1.SuspendLayout( );
this.groupBox2.SuspendLayout( );
this.groupBox3.SuspendLayout( );
this.groupBox4.SuspendLayout( );
this.groupBox5.SuspendLayout( );
this.SuspendLayout( );
//
// groupBox1
//
this.groupBox1.Controls.Add( this.ySlider );
this.groupBox1.Controls.Add( this.maxYBox );
this.groupBox1.Controls.Add( this.label2 );
this.groupBox1.Controls.Add( this.minYBox );
this.groupBox1.Controls.Add( this.label1 );
this.groupBox1.Location = new System.Drawing.Point( 10, 10 );
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size( 280, 75 );
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Y";
//
// ySlider
//
this.ySlider.Location = new System.Drawing.Point( 8, 45 );
this.ySlider.Name = "ySlider";
this.ySlider.Size = new System.Drawing.Size( 263, 23 );
this.ySlider.TabIndex = 4;
this.ySlider.Type = IPLab.ColorSliderType.InnerGradient;
this.ySlider.ValuesChanged += new System.EventHandler( this.ySlider_ValuesChanged );
//
// maxYBox
//
this.maxYBox.Location = new System.Drawing.Point( 218, 20 );
this.maxYBox.Name = "maxYBox";
this.maxYBox.Size = new System.Drawing.Size( 50, 20 );
this.maxYBox.TabIndex = 3;
this.maxYBox.Text = "";
this.maxYBox.TextChanged += new System.EventHandler( this.maxYBox_TextChanged );
//
// label2
//
this.label2.Location = new System.Drawing.Point( 186, 23 );
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size( 30, 15 );
this.label2.TabIndex = 2;
this.label2.Text = "Max:";
//
// minYBox
//
this.minYBox.Location = new System.Drawing.Point( 40, 20 );
this.minYBox.Name = "minYBox";
this.minYBox.Size = new System.Drawing.Size( 50, 20 );
this.minYBox.TabIndex = 1;
this.minYBox.Text = "";
this.minYBox.TextChanged += new System.EventHandler( this.minYBox_TextChanged );
//
// label1
//
this.label1.Location = new System.Drawing.Point( 10, 23 );
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size( 30, 16 );
this.label1.TabIndex = 0;
this.label1.Text = "Min:";
//
// groupBox2
//
this.groupBox2.Controls.Add( this.cbSlider );
this.groupBox2.Controls.Add( this.maxCbBox );
this.groupBox2.Controls.Add( this.label4 );
this.groupBox2.Controls.Add( this.minCbBox );
this.groupBox2.Controls.Add( this.label3 );
this.groupBox2.Location = new System.Drawing.Point( 10, 90 );
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size( 280, 75 );
this.groupBox2.TabIndex = 1;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Cb";
//
// cbSlider
//
this.cbSlider.Location = new System.Drawing.Point( 8, 45 );
this.cbSlider.Name = "cbSlider";
this.cbSlider.Size = new System.Drawing.Size( 263, 23 );
this.cbSlider.TabIndex = 4;
this.cbSlider.Type = IPLab.ColorSliderType.InnerGradient;
this.cbSlider.ValuesChanged += new System.EventHandler( this.cbSlider_ValuesChanged );
//
// maxCbBox
//
this.maxCbBox.Location = new System.Drawing.Point( 218, 20 );
this.maxCbBox.Name = "maxCbBox";
this.maxCbBox.Size = new System.Drawing.Size( 50, 20 );
this.maxCbBox.TabIndex = 3;
this.maxCbBox.Text = "";
this.maxCbBox.TextChanged += new System.EventHandler( this.maxCbBox_TextChanged );
//
// label4
//
this.label4.Location = new System.Drawing.Point( 186, 23 );
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size( 30, 15 );
this.label4.TabIndex = 2;
this.label4.Text = "Max:";
//
// minCbBox
//
this.minCbBox.Location = new System.Drawing.Point( 40, 20 );
this.minCbBox.Name = "minCbBox";
this.minCbBox.Size = new System.Drawing.Size( 50, 20 );
this.minCbBox.TabIndex = 1;
this.minCbBox.Text = "";
this.minCbBox.TextChanged += new System.EventHandler( this.minCbBox_TextChanged );
//
// label3
//
this.label3.Location = new System.Drawing.Point( 10, 23 );
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size( 30, 15 );
this.label3.TabIndex = 0;
this.label3.Text = "Min:";
//
// groupBox3
//
this.groupBox3.Controls.Add( this.crSlider );
this.groupBox3.Controls.Add( this.maxCrBox );
this.groupBox3.Controls.Add( this.label5 );
this.groupBox3.Controls.Add( this.minCrBox );
this.groupBox3.Controls.Add( this.label6 );
this.groupBox3.Location = new System.Drawing.Point( 10, 170 );
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size( 280, 75 );
this.groupBox3.TabIndex = 5;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Cr";
//
// crSlider
//
this.crSlider.Location = new System.Drawing.Point( 8, 45 );
this.crSlider.Name = "crSlider";
this.crSlider.Size = new System.Drawing.Size( 263, 23 );
this.crSlider.TabIndex = 4;
this.crSlider.Type = IPLab.ColorSliderType.InnerGradient;
this.crSlider.ValuesChanged += new System.EventHandler( this.crSlider_ValuesChanged );
//
// maxCrBox
//
this.maxCrBox.Location = new System.Drawing.Point( 218, 20 );
this.maxCrBox.Name = "maxCrBox";
this.maxCrBox.Size = new System.Drawing.Size( 50, 20 );
this.maxCrBox.TabIndex = 3;
this.maxCrBox.Text = "";
this.maxCrBox.TextChanged += new System.EventHandler( this.maxCrBox_TextChanged );
//
// label5
//
this.label5.Location = new System.Drawing.Point( 186, 23 );
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size( 30, 15 );
this.label5.TabIndex = 2;
this.label5.Text = "Max:";
//
// minCrBox
//
this.minCrBox.Location = new System.Drawing.Point( 40, 20 );
this.minCrBox.Name = "minCrBox";
this.minCrBox.Size = new System.Drawing.Size( 50, 20 );
this.minCrBox.TabIndex = 1;
this.minCrBox.Text = "";
this.minCrBox.TextChanged += new System.EventHandler( this.minCrBox_TextChanged );
//
// label6
//
this.label6.Location = new System.Drawing.Point( 10, 23 );
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size( 30, 15 );
this.label6.TabIndex = 0;
this.label6.Text = "Min:";
//
// groupBox4
//
this.groupBox4.Controls.Add( this.fillCrBox );
this.groupBox4.Controls.Add( this.label9 );
this.groupBox4.Controls.Add( this.fillCbBox );
this.groupBox4.Controls.Add( this.label8 );
this.groupBox4.Controls.Add( this.fillYBox );
this.groupBox4.Controls.Add( this.label7 );
this.groupBox4.Location = new System.Drawing.Point( 10, 250 );
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size( 280, 50 );
this.groupBox4.TabIndex = 6;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "Fill Color";
//
// fillCrBox
//
this.fillCrBox.Location = new System.Drawing.Point( 218, 20 );
this.fillCrBox.Name = "fillCrBox";
this.fillCrBox.Size = new System.Drawing.Size( 50, 20 );
this.fillCrBox.TabIndex = 5;
this.fillCrBox.Text = "";
this.fillCrBox.TextChanged += new System.EventHandler( this.fillCrBox_TextChanged );
//
// label9
//
this.label9.Location = new System.Drawing.Point( 195, 23 );
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size( 21, 16 );
this.label9.TabIndex = 4;
this.label9.Text = "Cr:";
//
// fillCbBox
//
this.fillCbBox.Location = new System.Drawing.Point( 120, 20 );
this.fillCbBox.Name = "fillCbBox";
this.fillCbBox.Size = new System.Drawing.Size( 50, 20 );
this.fillCbBox.TabIndex = 3;
this.fillCbBox.Text = "";
this.fillCbBox.TextChanged += new System.EventHandler( this.fillCbBox_TextChanged );
//
// label8
//
this.label8.Location = new System.Drawing.Point( 96, 23 );
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size( 25, 15 );
this.label8.TabIndex = 2;
this.label8.Text = "Cb:";
//
// fillYBox
//
this.fillYBox.Location = new System.Drawing.Point( 30, 20 );
this.fillYBox.Name = "fillYBox";
this.fillYBox.Size = new System.Drawing.Size( 50, 20 );
this.fillYBox.TabIndex = 1;
this.fillYBox.Text = "";
this.fillYBox.TextChanged += new System.EventHandler( this.fillYBox_TextChanged );
//
// label7
//
this.label7.Location = new System.Drawing.Point( 10, 23 );
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size( 20, 15 );
this.label7.TabIndex = 0;
this.label7.Text = "Y:";
//
// groupBox5
//
this.groupBox5.Controls.Add( this.filterPreview );
this.groupBox5.Location = new System.Drawing.Point( 300, 10 );
this.groupBox5.Name = "groupBox5";
this.groupBox5.Size = new System.Drawing.Size( 170, 175 );
this.groupBox5.TabIndex = 7;
this.groupBox5.TabStop = false;
this.groupBox5.Text = "Preview";
//
// filterPreview
//
this.filterPreview.Image = null;
this.filterPreview.Location = new System.Drawing.Point( 10, 15 );
this.filterPreview.Name = "filterPreview";
this.filterPreview.Size = new System.Drawing.Size( 150, 150 );
this.filterPreview.TabIndex = 0;
this.filterPreview.Text = "filterPreview1";
//
// label10
//
this.label10.Location = new System.Drawing.Point( 300, 198 );
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size( 52, 15 );
this.label10.TabIndex = 8;
this.label10.Text = "Fill type:";
//
// fillTypeCombo
//
this.fillTypeCombo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.fillTypeCombo.Items.AddRange( new object[] {
"Outside",
"Inside"} );
this.fillTypeCombo.Location = new System.Drawing.Point( 350, 195 );
this.fillTypeCombo.Name = "fillTypeCombo";
this.fillTypeCombo.Size = new System.Drawing.Size( 120, 21 );
this.fillTypeCombo.TabIndex = 9;
this.fillTypeCombo.SelectedIndexChanged += new System.EventHandler( this.fillTypeCombo_SelectedIndexChanged );
//
// okButton
//
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.okButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.okButton.Location = new System.Drawing.Point( 310, 275 );
this.okButton.Name = "okButton";
this.okButton.TabIndex = 10;
this.okButton.Text = "Ok";
//
// cancelButton
//
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.cancelButton.Location = new System.Drawing.Point( 395, 275 );
this.cancelButton.Name = "cancelButton";
this.cancelButton.TabIndex = 11;
this.cancelButton.Text = "Cancel";
//
// YCbCrFilteringForm
//
this.AcceptButton = this.okButton;
this.AutoScaleBaseSize = new System.Drawing.Size( 5, 13 );
this.CancelButton = this.cancelButton;
this.ClientSize = new System.Drawing.Size( 479, 308 );
this.Controls.Add( this.cancelButton );
this.Controls.Add( this.okButton );
this.Controls.Add( this.fillTypeCombo );
this.Controls.Add( this.label10 );
this.Controls.Add( this.groupBox5 );
this.Controls.Add( this.groupBox4 );
this.Controls.Add( this.groupBox2 );
this.Controls.Add( this.groupBox1 );
this.Controls.Add( this.groupBox3 );
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "YCbCrFilteringForm";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "YCbCr Filtering";
this.groupBox1.ResumeLayout( false );
this.groupBox2.ResumeLayout( false );
this.groupBox3.ResumeLayout( false );
this.groupBox4.ResumeLayout( false );
this.groupBox5.ResumeLayout( false );
this.ResumeLayout( false );
}
#endregion
// Update filter
private void UpdateFilter( )
{
filter.Y = yRange;
filter.Cb = cbRange;
filter.Cr = crRange;
filterPreview.RefreshFilter( );
}
// Min Y changed
private void minYBox_TextChanged( object sender, System.EventArgs e )
{
try
{
yRange.Min = Math.Max( 0.0, Math.Min( 1.0, double.Parse( minYBox.Text ) ) );
ySlider.Min = (int) ( yRange.Min * 255 );
UpdateFilter( );
}
catch ( Exception )
{
}
}
// Max Y changed
private void maxYBox_TextChanged( object sender, System.EventArgs e )
{
try
{
yRange.Max = Math.Max( 0.0, Math.Min( 1.0, double.Parse( maxYBox.Text ) ) );
ySlider.Max = (int) ( yRange.Max * 255 );
UpdateFilter( );
}
catch ( Exception )
{
}
}
// Min Cb changed
private void minCbBox_TextChanged( object sender, System.EventArgs e )
{
try
{
cbRange.Min = Math.Max( -0.5, Math.Min( 0.5, double.Parse( minCbBox.Text ) ) );
cbSlider.Min = (int) ( ( cbRange.Min + 0.5 ) * 255 );
UpdateFilter( );
}
catch ( Exception )
{
}
}
// Max Cb changed
private void maxCbBox_TextChanged( object sender, System.EventArgs e )
{
try
{
cbRange.Max = Math.Max( -0.5, Math.Min( 0.5, double.Parse( maxCbBox.Text ) ) );
cbSlider.Max = (int) ( ( cbRange.Max + 0.5 ) * 255 );
UpdateFilter( );
}
catch ( Exception )
{
}
}
// Min Cb changed
private void minCrBox_TextChanged( object sender, System.EventArgs e )
{
try
{
crRange.Min = Math.Max( -0.5, Math.Min( 0.5, double.Parse( minCrBox.Text ) ) );
crSlider.Min = (int) ( ( crRange.Min + 0.5 ) * 255 );
UpdateFilter( );
}
catch ( Exception )
{
}
}
// Max Cb changed
private void maxCrBox_TextChanged( object sender, System.EventArgs e )
{
try
{
crRange.Max = Math.Max( -0.5, Math.Min( 0.5, double.Parse( maxCrBox.Text ) ) );
crSlider.Max = (int) ( ( crRange.Max + 0.5 ) * 255 );
UpdateFilter( );
}
catch ( Exception )
{
}
}
// Y slider changed
private void ySlider_ValuesChanged( object sender, System.EventArgs e )
{
minYBox.Text = ( (double) ySlider.Min / 255 ).ToString( "F3" );
maxYBox.Text = ( (double) ySlider.Max / 255 ).ToString( "F3" );
}
// Cb slider changed
private void cbSlider_ValuesChanged( object sender, System.EventArgs e )
{
minCbBox.Text = ( (double) cbSlider.Min / 255 - 0.5 ).ToString( "F3" );
maxCbBox.Text = ( (double) cbSlider.Max / 255 - 0.5 ).ToString( "F3" );
}
// Cr slider changed
private void crSlider_ValuesChanged( object sender, System.EventArgs e )
{
minCrBox.Text = ( (double) crSlider.Min / 255 - 0.5 ).ToString( "F3" );
maxCrBox.Text = ( (double) crSlider.Max / 255 - 0.5 ).ToString( "F3" );
}
// Fill Y changed
private void fillYBox_TextChanged( object sender, System.EventArgs e )
{
try
{
fillY = double.Parse( fillYBox.Text );
UpdateFillColor( );
}
catch ( Exception )
{
}
}
// Fill Cb changed
private void fillCbBox_TextChanged( object sender, System.EventArgs e )
{
try
{
fillCb = double.Parse( fillCbBox.Text );
UpdateFillColor( );
}
catch ( Exception )
{
}
}
// Fill Cr changed
private void fillCrBox_TextChanged( object sender, System.EventArgs e )
{
try
{
fillCr = double.Parse( fillCrBox.Text );
UpdateFillColor( );
}
catch ( Exception )
{
}
}
// Update fil color
private void UpdateFillColor( )
{
filter.FillColor = new YCbCr( fillY, fillCb, fillCr );
filterPreview.RefreshFilter( );
}
// Fill type changed
private void fillTypeCombo_SelectedIndexChanged( object sender, System.EventArgs e )
{
ColorSliderType[] types = new ColorSliderType[] { ColorSliderType.InnerGradient, ColorSliderType.OuterGradient };
ColorSliderType type = types[fillTypeCombo.SelectedIndex];
ySlider.Type = type;
cbSlider.Type = type;
crSlider.Type = type;
filter.FillOutsideRange = ( fillTypeCombo.SelectedIndex == 0 );
filterPreview.RefreshFilter( );
}
}
}