using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using AForge.Imaging.Filters;
namespace IPLab
{
/// <summary>
/// Summary description for EuclideanColorFilteringForm.
/// </summary>
public class EuclideanColorFilteringForm : System.Windows.Forms.Form
{
private EuclideanColorFiltering filter = new EuclideanColorFiltering( );
private byte red = 255, green = 255, blue = 255;
private byte fillR = 0, fillG = 0, fillB = 0;
private short radius = 100;
private System.Windows.Forms.GroupBox groupBox4;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox redBox;
private System.Windows.Forms.TextBox greenBox;
private System.Windows.Forms.TextBox blueBox;
private System.Windows.Forms.GroupBox groupBox5;
private IPLab.FilterPreview filterPreview;
private IPLab.ColorSlider redSlider;
private IPLab.ColorSlider greenSlider;
private IPLab.ColorSlider blueSlider;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.TextBox radiusBox;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox fillRBox;
private System.Windows.Forms.TextBox fillGBox;
private System.Windows.Forms.TextBox fillBBox;
private System.Windows.Forms.Button cancelButton;
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.TrackBar radiusTrackBar;
private System.Windows.Forms.ComboBox fillTypeCombo;
private System.Windows.Forms.Label label7;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
// Image property
public Bitmap Image
{
set { filterPreview.Image = value; }
}
// Filter property
public IFilter Filter
{
get { return filter; }
}
// Constructor
public EuclideanColorFilteringForm( )
{
//
// Required for Windows Form Designer support
//
InitializeComponent( );
//
redBox.Text = red.ToString( );
greenBox.Text = green.ToString( );
blueBox.Text = blue.ToString( );
radiusBox.Text = radius.ToString( );
fillRBox.Text = fillR.ToString( );
fillGBox.Text = fillG.ToString( );
fillBBox.Text = fillB.ToString( );
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.groupBox4 = new System.Windows.Forms.GroupBox( );
this.blueSlider = new IPLab.ColorSlider( );
this.greenSlider = new IPLab.ColorSlider( );
this.redSlider = new IPLab.ColorSlider( );
this.label4 = new System.Windows.Forms.Label( );
this.label3 = new System.Windows.Forms.Label( );
this.label10 = new System.Windows.Forms.Label( );
this.redBox = new System.Windows.Forms.TextBox( );
this.greenBox = new System.Windows.Forms.TextBox( );
this.blueBox = new System.Windows.Forms.TextBox( );
this.groupBox5 = new System.Windows.Forms.GroupBox( );
this.filterPreview = new IPLab.FilterPreview( );
this.radiusTrackBar = new System.Windows.Forms.TrackBar( );
this.groupBox1 = new System.Windows.Forms.GroupBox( );
this.radiusBox = new System.Windows.Forms.TextBox( );
this.groupBox2 = new System.Windows.Forms.GroupBox( );
this.label1 = new System.Windows.Forms.Label( );
this.label2 = new System.Windows.Forms.Label( );
this.label5 = new System.Windows.Forms.Label( );
this.fillRBox = new System.Windows.Forms.TextBox( );
this.fillGBox = new System.Windows.Forms.TextBox( );
this.fillBBox = new System.Windows.Forms.TextBox( );
this.cancelButton = new System.Windows.Forms.Button( );
this.okButton = new System.Windows.Forms.Button( );
this.fillTypeCombo = new System.Windows.Forms.ComboBox( );
this.label7 = new System.Windows.Forms.Label( );
this.groupBox4.SuspendLayout( );
this.groupBox5.SuspendLayout( );
( (System.ComponentModel.ISupportInitialize) ( this.radiusTrackBar ) ).BeginInit( );
this.groupBox1.SuspendLayout( );
this.groupBox2.SuspendLayout( );
this.SuspendLayout( );
//
// groupBox4
//
this.groupBox4.Controls.AddRange( new System.Windows.Forms.Control[] {
this.blueSlider,
this.greenSlider,
this.redSlider,
this.label4,
this.label3,
this.label10,
this.redBox,
this.greenBox,
this.blueBox} );
this.groupBox4.Location = new System.Drawing.Point( 10, 10 );
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size( 280, 120 );
this.groupBox4.TabIndex = 0;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "Center color";
//
// blueSlider
//
this.blueSlider.Color2 = System.Drawing.Color.Blue;
this.blueSlider.DoubleArrow = false;
this.blueSlider.Location = new System.Drawing.Point( 8, 90 );
this.blueSlider.Name = "blueSlider";
this.blueSlider.Size = new System.Drawing.Size( 262, 20 );
this.blueSlider.TabIndex = 8;
this.blueSlider.TabStop = false;
this.blueSlider.ValuesChanged += new System.EventHandler( this.blueSlider_ValuesChanged );
//
// greenSlider
//
this.greenSlider.Color2 = System.Drawing.Color.Lime;
this.greenSlider.DoubleArrow = false;
this.greenSlider.Location = new System.Drawing.Point( 8, 70 );
this.greenSlider.Name = "greenSlider";
this.greenSlider.Size = new System.Drawing.Size( 262, 20 );
this.greenSlider.TabIndex = 7;
this.greenSlider.TabStop = false;
this.greenSlider.ValuesChanged += new System.EventHandler( this.greenSlider_ValuesChanged );
//
// redSlider
//
this.redSlider.Color2 = System.Drawing.Color.Red;
this.redSlider.DoubleArrow = false;
this.redSlider.Location = new System.Drawing.Point( 8, 50 );
this.redSlider.Name = "redSlider";
this.redSlider.Size = new System.Drawing.Size( 262, 20 );
this.redSlider.TabIndex = 6;
this.redSlider.TabStop = false;
this.redSlider.ValuesChanged += new System.EventHandler( this.redSlider_ValuesChanged );
//
// label4
//
this.label4.Location = new System.Drawing.Point( 197, 23 );
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size( 17, 14 );
this.label4.TabIndex = 4;
this.label4.Text = "B:";
//
// label3
//
this.label3.Location = new System.Drawing.Point( 100, 23 );
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size( 17, 14 );
this.label3.TabIndex = 2;
this.label3.Text = "G:";
//
// label10
//
this.label10.Location = new System.Drawing.Point( 10, 23 );
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size( 15, 14 );
this.label10.TabIndex = 0;
this.label10.Text = "R:";
//
// redBox
//
this.redBox.Location = new System.Drawing.Point( 30, 20 );
this.redBox.Name = "redBox";
this.redBox.Size = new System.Drawing.Size( 50, 20 );
this.redBox.TabIndex = 1;
this.redBox.Text = "";
this.redBox.TextChanged += new System.EventHandler( this.redBox_TextChanged );
//
// greenBox
//
this.greenBox.Location = new System.Drawing.Point( 120, 20 );
this.greenBox.Name = "greenBox";
this.greenBox.Size = new System.Drawing.Size( 50, 20 );
this.greenBox.TabIndex = 3;
this.greenBox.Text = "";
this.greenBox.TextChanged += new System.EventHandler( this.greenBox_TextChanged );
//
// blueBox
//
this.blueBox.Location = new System.Drawing.Point( 218, 20 );
this.blueBox.Name = "blueBox";
this.blueBox.Size = new System.Drawing.Size( 50, 20 );
this.blueBox.TabIndex = 5;
this.blueBox.Text = "";
this.blueBox.TextChanged += new System.EventHandler( this.blueBox_TextChanged );
//
// groupBox5
//
this.groupBox5.Controls.AddRange( new System.Windows.Forms.Control[] {
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 = 4;
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.TabStop = false;
//
// radiusTrackBar
//
this.radiusTrackBar.Location = new System.Drawing.Point( 5, 45 );
this.radiusTrackBar.Maximum = 450;
this.radiusTrackBar.Minimum = 1;
this.radiusTrackBar.Name = "radiusTrackBar";
this.radiusTrackBar.Size = new System.Drawing.Size( 268, 42 );
this.radiusTrackBar.TabIndex = 1;
this.radiusTrackBar.TickFrequency = 10;
this.radiusTrackBar.Value = 100;
this.radiusTrackBar.Scroll += new System.EventHandler( this.radiusTrackBar_Scroll );
//
// groupBox1
//
this.groupBox1.Controls.AddRange( new System.Windows.Forms.Control[] {
this.radiusBox,
this.radiusTrackBar} );
this.groupBox1.Location = new System.Drawing.Point( 10, 135 );
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size( 280, 90 );
this.groupBox1.TabIndex = 6;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Radius";
//
// radiusBox
//
this.radiusBox.Location = new System.Drawing.Point( 13, 20 );
this.radiusBox.Name = "radiusBox";
this.radiusBox.Size = new System.Drawing.Size( 50, 20 );
this.radiusBox.TabIndex = 0;
this.radiusBox.Text = "";
this.radiusBox.TextChanged += new System.EventHandler( this.radiusBox_TextChanged );
//
// groupBox2
//
this.groupBox2.Controls.AddRange( new System.Windows.Forms.Control[] {
this.label1,
this.label2,
this.label5,
this.fillRBox,
this.fillGBox,
this.fillBBox} );
this.groupBox2.Location = new System.Drawing.Point( 10, 230 );
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size( 280, 50 );
this.groupBox2.TabIndex = 7;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Fill color";
//
// label1
//
this.label1.Location = new System.Drawing.Point( 197, 23 );
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size( 17, 14 );
this.label1.TabIndex = 7;
this.label1.Text = "B:";
//
// label2
//
this.label2.Location = new System.Drawing.Point( 100, 23 );
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size( 17, 14 );
this.label2.TabIndex = 6;
this.label2.Text = "G:";
//
// label5
//
this.label5.Location = new System.Drawing.Point( 10, 23 );
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size( 15, 14 );
this.label5.TabIndex = 0;
this.label5.Text = "R:";
//
// fillRBox
//
this.fillRBox.Location = new System.Drawing.Point( 30, 20 );
this.fillRBox.Name = "fillRBox";
this.fillRBox.Size = new System.Drawing.Size( 50, 20 );
this.fillRBox.TabIndex = 0;
this.fillRBox.Text = "";
this.fillRBox.TextChanged += new System.EventHandler( this.fillBox_TextChanged );
//
// fillGBox
//
this.fillGBox.Location = new System.Drawing.Point( 120, 20 );
this.fillGBox.Name = "fillGBox";
this.fillGBox.Size = new System.Drawing.Size( 50, 20 );
this.fillGBox.TabIndex = 1;
this.fillGBox.Text = "";
this.fillGBox.TextChanged += new System.EventHandler( this.fillBox_TextChanged );
//
// fillBBox
//
this.fillBBox.Location = new System.Drawing.Point( 218, 20 );
this.fillBBox.Name = "fillBBox";
this.fillBBox.Size = new System.Drawing.Size( 50, 20 );
this.fillBBox.TabIndex = 2;
this.fillBBox.Text = "";
this.fillBBox.TextChanged += new System.EventHandler( this.fillBox_TextChanged );
//
// 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, 255 );
this.cancelButton.Name = "cancelButton";
this.cancelButton.TabIndex = 11;
this.cancelButton.Text = "Cancel";
//
// 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, 255 );
this.okButton.Name = "okButton";
this.okButton.TabIndex = 10;
this.okButton.Text = "Ok";
//
// 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 );
//
// label7
//
this.label7.Location = new System.Drawing.Point( 300, 198 );
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size( 50, 14 );
this.label7.TabIndex = 12;
this.label7.Text = "Fill type:";
//
// EuclideanColorFilteringForm
//
this.AcceptButton = this.okButton;
this.AutoScaleBaseSize = new System.Drawing.Size( 5, 13 );
this.CancelButton = this.cancelButton;
this.ClientSize = new System.Drawing.Size( 479, 288 );
this.Controls.AddRange( new System.Windows.Forms.Control[] {
this.fillTypeCombo,
this.label7,
this.cancelButton,
this.okButton,
this.groupBox2,
this.groupBox1,
this.groupBox5,
this.groupBox4} );
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "EuclideanColorFilteringForm";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Euclidean Color Filtering";
this.groupBox4.ResumeLayout( false );
this.groupBox5.ResumeLayout( false );
( (System.ComponentModel.ISupportInitialize) ( this.radiusTrackBar ) ).EndInit( );
this.groupBox1.ResumeLayout( false );
this.groupBox2.ResumeLayout( false );
this.ResumeLayout( false );
}
#endregion
// Red changed
private void redBox_TextChanged( object sender, System.EventArgs e )
{
try
{
red = byte.Parse( redBox.Text );
redSlider.Min = red;
UpdateCenterColor( );
}
catch ( Exception )
{
}
}
// Green changed
private void greenBox_TextChanged( object sender, System.EventArgs e )
{
try
{
green = byte.Parse( greenBox.Text );
greenSlider.Min = green;
UpdateCenterColor( );
}
catch ( Exception )
{
}
}
// Blue changed
private void blueBox_TextChanged( object sender, System.EventArgs e )
{
try
{
blue = byte.Parse( blueBox.Text );
blueSlider.Min = blue;
UpdateCenterColor( );
}
catch ( Exception )
{
}
}
// Red slider changed
private void redSlider_ValuesChanged( object sender, System.EventArgs e )
{
redBox.Text = redSlider.Min.ToString( );
}
// Green slider changed
private void greenSlider_ValuesChanged( object sender, System.EventArgs e )
{
greenBox.Text = greenSlider.Min.ToString( );
}
// Blue slider changed
private void blueSlider_ValuesChanged( object sender, System.EventArgs e )
{
blueBox.Text = blueSlider.Min.ToString( );
}
// Update center color
private void UpdateCenterColor( )
{
// update slider colors
redSlider.Color1 = Color.FromArgb( 0, green, blue );
redSlider.Color2 = Color.FromArgb( 255, green, blue );
greenSlider.Color1 = Color.FromArgb( red, 0, blue );
greenSlider.Color2 = Color.FromArgb( red, 255, blue );
blueSlider.Color1 = Color.FromArgb( red, green, 0 );
blueSlider.Color2 = Color.FromArgb( red, green, 255 );
// update filter
filter.CenterColor = Color.FromArgb( red, green, blue );
filterPreview.RefreshFilter( );
}
// Radius changed
private void radiusBox_TextChanged( object sender, System.EventArgs e )
{
try
{
radius = Math.Max( (short) 1, Math.Min( (short) 450, short.Parse( radiusBox.Text ) ) );
radiusTrackBar.Value = filter.Radius = radius;
filterPreview.RefreshFilter( );
}
catch ( Exception )
{
}
}
// Radius trackbar scrolled
private void radiusTrackBar_Scroll( object sender, System.EventArgs e )
{
radiusBox.Text = radiusTrackBar.Value.ToString( );
}
// Fill color changed
private void fillBox_TextChanged( object sender, System.EventArgs e )
{
try
{
fillR = byte.Parse( fillRBox.Text );
fillG = byte.Parse( fillGBox.Text );
fillB = byte.Parse( fillBBox.Text );
filter.FillColor = Color.FromArgb( fillR, fillG, fillB );
filterPreview.RefreshFilter( );
}
catch ( Exception )
{
}
}
// Fill type changed
private void fillTypeCombo_SelectedIndexChanged( object sender, System.EventArgs e )
{
filter.FillOutside = ( fillTypeCombo.SelectedIndex == 0 );
filterPreview.RefreshFilter( );
}
}
}