www.pudn.com > PS.rar > MainForm.cs


//##################################################################################### 
//★★★★★★★           http://www.cnpopsoft.com [华普软件]           ★★★★★★★ 
//★★  华普软件-VB、C#专业论文与源码荟萃,敏捷开发,平台战略,让商业软件靓起来!  ★★ 
//##################################################################################### 
 
// Image Processing Lab 
// 
// Copyright ?Andrew Kirillov, 2005 
// andrew.kirillov@gmail.com 
// 
 
using System; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Drawing.Printing; 
using System.Collections; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Data; 
using System.IO; 
 
using WeifenLuo.WinFormsUI; 
using rpaulo.toolbar; 
using AForge.Imaging; 
 
namespace IPLab 
{ 
	///  
	/// Summary description for Form1. 
	///  
	public class MainForm : System.Windows.Forms.Form, IDocumentsHost 
	{ 
		private static string configFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "app.config"); 
		private static string dockManagerConfigFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "DockManager.config"); 
 
		private int unnamedNumber = 0; 
		private Configuration config = new Configuration(); 
		private HistogramWindow histogramWin = new HistogramWindow(); 
		private ImageStatisticsWindow statisticsWin = new ImageStatisticsWindow(); 
 
		private ToolBarManager toolBarManager; 
		private WeifenLuo.WinFormsUI.DockManager dockManager; 
		private System.Windows.Forms.MainMenu mainMenu; 
		private System.Windows.Forms.MenuItem fileItem; 
		private System.Windows.Forms.MenuItem exitFileItem; 
		private System.Windows.Forms.MenuItem OpenItem; 
		private System.Windows.Forms.MenuItem menuItem2; 
		private System.Windows.Forms.MenuItem closeFileItem; 
		private System.Windows.Forms.MenuItem closeAllFileItem; 
		private System.Windows.Forms.MenuItem optionsItem; 
		private System.Windows.Forms.MenuItem openInNewOptionsItem; 
		private System.Windows.Forms.MenuItem viewItem; 
		private System.Windows.Forms.MenuItem windowItem; 
		private System.Windows.Forms.MenuItem helpItem; 
		private System.Windows.Forms.MenuItem histogramViewItem; 
		private System.Windows.Forms.MenuItem redHistogramViewItem; 
		private System.Windows.Forms.MenuItem greenHistogramViewItem; 
		private System.Windows.Forms.MenuItem blueHistogramViewItem; 
		private System.Windows.Forms.StatusBarPanel zoomPanel; 
		private System.Windows.Forms.StatusBarPanel sizePanel; 
		private System.Windows.Forms.StatusBarPanel infoPanel; 
		private System.Windows.Forms.Panel panel1; 
		private System.Windows.Forms.StatusBar statusBar; 
		private System.Windows.Forms.MenuItem rememberOptionsItem; 
		private System.Windows.Forms.MenuItem menuItem1; 
		private System.Windows.Forms.MenuItem reloadFileItem; 
		private System.Windows.Forms.MenuItem menuItem3; 
		private System.Windows.Forms.MenuItem centerViewItem; 
		private System.Windows.Forms.StatusBarPanel selectionPanel; 
		private System.Windows.Forms.OpenFileDialog ofd; 
		private System.Windows.Forms.StatusBarPanel colorPanel; 
		private System.Windows.Forms.ImageList imageList; 
		private System.Windows.Forms.ToolBar mainToolBar; 
		private System.Windows.Forms.ToolBarButton openButton; 
		private System.Windows.Forms.ToolBarButton sep1; 
		private System.Windows.Forms.ToolBarButton histogramButton; 
		private System.Windows.Forms.ToolBar imageToolBar; 
		private System.Windows.Forms.ImageList imageList2; 
		private System.Windows.Forms.ToolBarButton cloneButton; 
		private System.Windows.Forms.ToolBarButton cropButton; 
		private System.Windows.Forms.ToolBarButton toolBarButton1; 
		private System.Windows.Forms.ToolBarButton toolBarButton2; 
		private System.Windows.Forms.ToolBarButton zoomInButton; 
		private System.Windows.Forms.ToolBarButton zoomOutButton; 
		private System.Windows.Forms.ToolBarButton toolBarButton3; 
		private System.Windows.Forms.ToolBarButton fitToScreenButton; 
		private System.Windows.Forms.ToolBarButton toolBarButton4; 
		private System.Windows.Forms.ToolBarButton aboutButton; 
		private System.Windows.Forms.ToolBarButton toolBarButton5; 
		private System.Windows.Forms.ToolBarButton levelsButton; 
		private System.Windows.Forms.ToolBarButton grayscaleButton; 
		private System.Windows.Forms.ToolBarButton thresholdButton; 
		private System.Windows.Forms.ToolBarButton toolBarButton6; 
		private System.Windows.Forms.ToolBarButton morphologyButton; 
		private System.Windows.Forms.ToolBarButton convolutionButton; 
		private System.Windows.Forms.MenuItem mainBarViewItem; 
		private System.Windows.Forms.MenuItem imageBarViewItem; 
		private System.Windows.Forms.MenuItem menuItem7; 
		private System.Windows.Forms.ToolBarButton resizeButton; 
		private System.Windows.Forms.ToolBarButton toolBarButton7; 
		private System.Windows.Forms.ToolBarButton rotateButton; 
		private System.Windows.Forms.StatusBarPanel hslPanel; 
		private System.Windows.Forms.ToolBarButton toolBarButton8; 
		private System.Windows.Forms.ToolBarButton saturationButton; 
		private System.Windows.Forms.ToolBarButton fourierButton; 
		private System.Windows.Forms.MenuItem copyFileItem; 
		private System.Windows.Forms.MenuItem pasteFileItem; 
		private System.Windows.Forms.MenuItem menuItem5; 
		private System.Windows.Forms.MenuItem saveFileItem; 
		private System.Windows.Forms.MenuItem aboutHelpItem; 
		private System.Windows.Forms.SaveFileDialog sfd; 
		private System.Windows.Forms.ToolBarButton pasteButton; 
		private System.Windows.Forms.ToolBarButton saveButton; 
		private System.Windows.Forms.ToolBarButton copyButton; 
		private System.Windows.Forms.ToolBarButton toolBarButton9; 
		private System.Drawing.Printing.PrintDocument printDocument; 
		private System.Windows.Forms.PrintPreviewDialog printPreviewDialog; 
		private System.Windows.Forms.MenuItem printPreviewFileItem; 
		private System.Windows.Forms.MenuItem pageSetupFileItem; 
		private System.Windows.Forms.MenuItem printFileItem; 
		private System.Windows.Forms.MenuItem menuItem8; 
		private System.Windows.Forms.PageSetupDialog pageSetupDialog; 
		private System.Windows.Forms.PrintDialog printDialog; 
		private System.Windows.Forms.StatusBarPanel ycbcrPanel; 
		private System.Windows.Forms.MenuItem statisticsViewItem; 
		private System.ComponentModel.IContainer components; 
 
		public MainForm() 
		{ 
			// 
			// Required for Windows Form Designer support 
			// 
			InitializeComponent(); 
 
			// 
			// TODO: Add any constructor code after InitializeComponent call 
			// 
			toolBarManager = new ToolBarManager(this, this); 
 
			// add toolbars 
			ToolBarDockHolder holder; 
 
			// main tool bar 
			mainToolBar.Text = "Main Tool Bar"; 
			holder = toolBarManager.AddControl(mainToolBar); 
			holder.AllowedBorders = AllowedBorders.Top | AllowedBorders.Left | AllowedBorders.Right; 
 
			// image toolbar 
			imageToolBar.Text = "Image Tool Bar"; 
			holder = toolBarManager.AddControl(imageToolBar); 
			holder.AllowedBorders = AllowedBorders.Top | AllowedBorders.Left | AllowedBorders.Right; 
 
			histogramWin.DockStateChanged += new EventHandler(histogram_DockStateChanged); 
			statisticsWin.DockStateChanged += new EventHandler(statistics_DockStateChanged); 
 
			histogramWin.VisibleChanged += new EventHandler( histogram_VisibleChanged ); 
			statisticsWin.VisibleChanged += new EventHandler( statistics_VisibleChanged ); 
		} 
 
		///  
		/// Clean up any resources being used. 
		///  
		protected override void Dispose( bool disposing ) 
		{ 
			if( disposing ) 
			{ 
				if (components != null)  
				{ 
					components.Dispose(); 
				} 
			} 
			base.Dispose( disposing ); 
		} 
 
		#region Windows Form Designer generated code 
		///  
		/// Required method for Designer support - do not modify 
		/// the contents of this method with the code editor. 
		///  
		private void InitializeComponent() 
		{ 
            this.components = new System.ComponentModel.Container(); 
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); 
            this.mainMenu = new System.Windows.Forms.MainMenu(this.components); 
            this.fileItem = new System.Windows.Forms.MenuItem(); 
            this.OpenItem = new System.Windows.Forms.MenuItem(); 
            this.reloadFileItem = new System.Windows.Forms.MenuItem(); 
            this.saveFileItem = new System.Windows.Forms.MenuItem(); 
            this.menuItem1 = new System.Windows.Forms.MenuItem(); 
            this.copyFileItem = new System.Windows.Forms.MenuItem(); 
            this.pasteFileItem = new System.Windows.Forms.MenuItem(); 
            this.menuItem5 = new System.Windows.Forms.MenuItem(); 
            this.closeFileItem = new System.Windows.Forms.MenuItem(); 
            this.closeAllFileItem = new System.Windows.Forms.MenuItem(); 
            this.menuItem8 = new System.Windows.Forms.MenuItem(); 
            this.pageSetupFileItem = new System.Windows.Forms.MenuItem(); 
            this.printFileItem = new System.Windows.Forms.MenuItem(); 
            this.printPreviewFileItem = new System.Windows.Forms.MenuItem(); 
            this.menuItem2 = new System.Windows.Forms.MenuItem(); 
            this.exitFileItem = new System.Windows.Forms.MenuItem(); 
            this.viewItem = new System.Windows.Forms.MenuItem(); 
            this.mainBarViewItem = new System.Windows.Forms.MenuItem(); 
            this.imageBarViewItem = new System.Windows.Forms.MenuItem(); 
            this.menuItem7 = new System.Windows.Forms.MenuItem(); 
            this.histogramViewItem = new System.Windows.Forms.MenuItem(); 
            this.statisticsViewItem = new System.Windows.Forms.MenuItem(); 
            this.redHistogramViewItem = new System.Windows.Forms.MenuItem(); 
            this.greenHistogramViewItem = new System.Windows.Forms.MenuItem(); 
            this.blueHistogramViewItem = new System.Windows.Forms.MenuItem(); 
            this.menuItem3 = new System.Windows.Forms.MenuItem(); 
            this.centerViewItem = new System.Windows.Forms.MenuItem(); 
            this.optionsItem = new System.Windows.Forms.MenuItem(); 
            this.openInNewOptionsItem = new System.Windows.Forms.MenuItem(); 
            this.rememberOptionsItem = new System.Windows.Forms.MenuItem(); 
            this.windowItem = new System.Windows.Forms.MenuItem(); 
            this.helpItem = new System.Windows.Forms.MenuItem(); 
            this.aboutHelpItem = new System.Windows.Forms.MenuItem(); 
            this.statusBar = new System.Windows.Forms.StatusBar(); 
            this.zoomPanel = new System.Windows.Forms.StatusBarPanel(); 
            this.sizePanel = new System.Windows.Forms.StatusBarPanel(); 
            this.selectionPanel = new System.Windows.Forms.StatusBarPanel(); 
            this.colorPanel = new System.Windows.Forms.StatusBarPanel(); 
            this.hslPanel = new System.Windows.Forms.StatusBarPanel(); 
            this.ycbcrPanel = new System.Windows.Forms.StatusBarPanel(); 
            this.infoPanel = new System.Windows.Forms.StatusBarPanel(); 
            this.panel1 = new System.Windows.Forms.Panel(); 
            this.dockManager = new WeifenLuo.WinFormsUI.DockManager(); 
            this.mainToolBar = new System.Windows.Forms.ToolBar(); 
            this.openButton = new System.Windows.Forms.ToolBarButton(); 
            this.saveButton = new System.Windows.Forms.ToolBarButton(); 
            this.sep1 = new System.Windows.Forms.ToolBarButton(); 
            this.copyButton = new System.Windows.Forms.ToolBarButton(); 
            this.pasteButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton9 = new System.Windows.Forms.ToolBarButton(); 
            this.histogramButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton4 = new System.Windows.Forms.ToolBarButton(); 
            this.aboutButton = new System.Windows.Forms.ToolBarButton(); 
            this.imageList = new System.Windows.Forms.ImageList(this.components); 
            this.imageToolBar = new System.Windows.Forms.ToolBar(); 
            this.cloneButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton1 = new System.Windows.Forms.ToolBarButton(); 
            this.cropButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton2 = new System.Windows.Forms.ToolBarButton(); 
            this.zoomInButton = new System.Windows.Forms.ToolBarButton(); 
            this.zoomOutButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton3 = new System.Windows.Forms.ToolBarButton(); 
            this.fitToScreenButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton5 = new System.Windows.Forms.ToolBarButton(); 
            this.resizeButton = new System.Windows.Forms.ToolBarButton(); 
            this.rotateButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton7 = new System.Windows.Forms.ToolBarButton(); 
            this.levelsButton = new System.Windows.Forms.ToolBarButton(); 
            this.grayscaleButton = new System.Windows.Forms.ToolBarButton(); 
            this.thresholdButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton6 = new System.Windows.Forms.ToolBarButton(); 
            this.morphologyButton = new System.Windows.Forms.ToolBarButton(); 
            this.convolutionButton = new System.Windows.Forms.ToolBarButton(); 
            this.toolBarButton8 = new System.Windows.Forms.ToolBarButton(); 
            this.saturationButton = new System.Windows.Forms.ToolBarButton(); 
            this.fourierButton = new System.Windows.Forms.ToolBarButton(); 
            this.imageList2 = new System.Windows.Forms.ImageList(this.components); 
            this.ofd = new System.Windows.Forms.OpenFileDialog(); 
            this.sfd = new System.Windows.Forms.SaveFileDialog(); 
            this.printDocument = new System.Drawing.Printing.PrintDocument(); 
            this.printPreviewDialog = new System.Windows.Forms.PrintPreviewDialog(); 
            this.pageSetupDialog = new System.Windows.Forms.PageSetupDialog(); 
            this.printDialog = new System.Windows.Forms.PrintDialog(); 
            ((System.ComponentModel.ISupportInitialize)(this.zoomPanel)).BeginInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.sizePanel)).BeginInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.selectionPanel)).BeginInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.colorPanel)).BeginInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.hslPanel)).BeginInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.ycbcrPanel)).BeginInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.infoPanel)).BeginInit(); 
            this.panel1.SuspendLayout(); 
            this.dockManager.SuspendLayout(); 
            this.SuspendLayout(); 
            //  
            // mainMenu 
            //  
            this.mainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
            this.fileItem, 
            this.viewItem, 
            this.optionsItem, 
            this.windowItem, 
            this.helpItem}); 
            //  
            // fileItem 
            //  
            this.fileItem.Index = 0; 
            this.fileItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
            this.OpenItem, 
            this.reloadFileItem, 
            this.saveFileItem, 
            this.menuItem1, 
            this.copyFileItem, 
            this.pasteFileItem, 
            this.menuItem5, 
            this.closeFileItem, 
            this.closeAllFileItem, 
            this.menuItem8, 
            this.pageSetupFileItem, 
            this.printFileItem, 
            this.printPreviewFileItem, 
            this.menuItem2, 
            this.exitFileItem}); 
            this.fileItem.Text = "文件(&F)"; 
            this.fileItem.Popup += new System.EventHandler(this.fileItem_Popup); 
            //  
            // OpenItem 
            //  
            this.OpenItem.Index = 0; 
            this.OpenItem.Shortcut = System.Windows.Forms.Shortcut.CtrlO; 
            this.OpenItem.Text = "打开(&O)"; 
            this.OpenItem.Click += new System.EventHandler(this.OpenItem_Click); 
            //  
            // reloadFileItem 
            //  
            this.reloadFileItem.Index = 1; 
            this.reloadFileItem.Shortcut = System.Windows.Forms.Shortcut.CtrlR; 
            this.reloadFileItem.Text = "重新载入(&R)"; 
            this.reloadFileItem.Click += new System.EventHandler(this.reloadFileItem_Click); 
            //  
            // saveFileItem 
            //  
            this.saveFileItem.Index = 2; 
            this.saveFileItem.Shortcut = System.Windows.Forms.Shortcut.CtrlS; 
            this.saveFileItem.Text = "保存(&S)"; 
            this.saveFileItem.Click += new System.EventHandler(this.saveFileItem_Click); 
            //  
            // menuItem1 
            //  
            this.menuItem1.Index = 3; 
            this.menuItem1.Text = "-"; 
            //  
            // copyFileItem 
            //  
            this.copyFileItem.Index = 4; 
            this.copyFileItem.Shortcut = System.Windows.Forms.Shortcut.CtrlC; 
            this.copyFileItem.Text = "复制(&C)"; 
            this.copyFileItem.Click += new System.EventHandler(this.copyFileItem_Click); 
            //  
            // pasteFileItem 
            //  
            this.pasteFileItem.Index = 5; 
            this.pasteFileItem.Shortcut = System.Windows.Forms.Shortcut.CtrlV; 
            this.pasteFileItem.Text = "粘贴(&V)"; 
            this.pasteFileItem.Click += new System.EventHandler(this.pasteFileItem_Click); 
            //  
            // menuItem5 
            //  
            this.menuItem5.Index = 6; 
            this.menuItem5.Text = "-"; 
            //  
            // closeFileItem 
            //  
            this.closeFileItem.Index = 7; 
            this.closeFileItem.Shortcut = System.Windows.Forms.Shortcut.CtrlF4; 
            this.closeFileItem.Text = "关闭(&L)"; 
            this.closeFileItem.Click += new System.EventHandler(this.closeFileItem_Click); 
            //  
            // closeAllFileItem 
            //  
            this.closeAllFileItem.Index = 8; 
            this.closeAllFileItem.Text = "全部关闭"; 
            this.closeAllFileItem.Click += new System.EventHandler(this.closeAllFileItem_Click); 
            //  
            // menuItem8 
            //  
            this.menuItem8.Index = 9; 
            this.menuItem8.Text = "-"; 
            //  
            // pageSetupFileItem 
            //  
            this.pageSetupFileItem.Index = 10; 
            this.pageSetupFileItem.Text = "页面设置"; 
            this.pageSetupFileItem.Click += new System.EventHandler(this.pageSetupFileItem_Click); 
            //  
            // printFileItem 
            //  
            this.printFileItem.Index = 11; 
            this.printFileItem.Text = "打印(&P)"; 
            this.printFileItem.Click += new System.EventHandler(this.printFileItem_Click); 
            //  
            // printPreviewFileItem 
            //  
            this.printPreviewFileItem.Index = 12; 
            this.printPreviewFileItem.Text = "打印预览"; 
            this.printPreviewFileItem.Click += new System.EventHandler(this.printPreviewFileItem_Click); 
            //  
            // menuItem2 
            //  
            this.menuItem2.Index = 13; 
            this.menuItem2.Text = "-"; 
            //  
            // exitFileItem 
            //  
            this.exitFileItem.Index = 14; 
            this.exitFileItem.Text = "退出(&X)"; 
            this.exitFileItem.Click += new System.EventHandler(this.exitFileItem_Click); 
            //  
            // viewItem 
            //  
            this.viewItem.Index = 1; 
            this.viewItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
            this.mainBarViewItem, 
            this.imageBarViewItem, 
            this.menuItem7, 
            this.histogramViewItem, 
            this.statisticsViewItem, 
            this.redHistogramViewItem, 
            this.greenHistogramViewItem, 
            this.blueHistogramViewItem, 
            this.menuItem3, 
            this.centerViewItem}); 
            this.viewItem.MergeOrder = 1; 
            this.viewItem.Text = "视图(&V)"; 
            this.viewItem.Popup += new System.EventHandler(this.viewItem_Popup); 
            //  
            // mainBarViewItem 
            //  
            this.mainBarViewItem.Index = 0; 
            this.mainBarViewItem.Text = "主工具栏"; 
            this.mainBarViewItem.Click += new System.EventHandler(this.mainBarViewItem_Click); 
            //  
            // imageBarViewItem 
            //  
            this.imageBarViewItem.Index = 1; 
            this.imageBarViewItem.Text = "图像工具栏"; 
            this.imageBarViewItem.Click += new System.EventHandler(this.imageBarViewItem_Click); 
            //  
            // menuItem7 
            //  
            this.menuItem7.Index = 2; 
            this.menuItem7.Text = "-"; 
            //  
            // histogramViewItem 
            //  
            this.histogramViewItem.Index = 3; 
            this.histogramViewItem.Shortcut = System.Windows.Forms.Shortcut.CtrlH; 
            this.histogramViewItem.Text = "直方图(&H)"; 
            this.histogramViewItem.Click += new System.EventHandler(this.histogramViewItem_Click); 
            //  
            // statisticsViewItem 
            //  
            this.statisticsViewItem.Index = 4; 
            this.statisticsViewItem.Shortcut = System.Windows.Forms.Shortcut.CtrlT; 
            this.statisticsViewItem.Text = "统计(&S)"; 
            this.statisticsViewItem.Click += new System.EventHandler(this.statisticsViewItem_Click); 
            //  
            // redHistogramViewItem 
            //  
            this.redHistogramViewItem.Index = 5; 
            this.redHistogramViewItem.Shortcut = System.Windows.Forms.Shortcut.Ctrl1; 
            this.redHistogramViewItem.Text = "R"; 
            this.redHistogramViewItem.Visible = false; 
            this.redHistogramViewItem.Click += new System.EventHandler(this.redHistogramViewItem_Click); 
            //  
            // greenHistogramViewItem 
            //  
            this.greenHistogramViewItem.Index = 6; 
            this.greenHistogramViewItem.Shortcut = System.Windows.Forms.Shortcut.Ctrl2; 
            this.greenHistogramViewItem.Text = "G"; 
            this.greenHistogramViewItem.Visible = false; 
            this.greenHistogramViewItem.Click += new System.EventHandler(this.greenHistogramViewItem_Click); 
            //  
            // blueHistogramViewItem 
            //  
            this.blueHistogramViewItem.Index = 7; 
            this.blueHistogramViewItem.Shortcut = System.Windows.Forms.Shortcut.Ctrl3; 
            this.blueHistogramViewItem.Text = "B"; 
            this.blueHistogramViewItem.Visible = false; 
            this.blueHistogramViewItem.Click += new System.EventHandler(this.blueHistogramViewItem_Click); 
            //  
            // menuItem3 
            //  
            this.menuItem3.Index = 8; 
            this.menuItem3.Text = "-"; 
            //  
            // centerViewItem 
            //  
            this.centerViewItem.Index = 9; 
            this.centerViewItem.Shortcut = System.Windows.Forms.Shortcut.F9; 
            this.centerViewItem.Text = "居中(&C)"; 
            this.centerViewItem.Click += new System.EventHandler(this.centerViewItem_Click); 
            //  
            // optionsItem 
            //  
            this.optionsItem.Index = 2; 
            this.optionsItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
            this.openInNewOptionsItem, 
            this.rememberOptionsItem}); 
            this.optionsItem.MergeOrder = 2; 
            this.optionsItem.Text = "选项(&O)"; 
            this.optionsItem.Popup += new System.EventHandler(this.optionsItem_Popup); 
            //  
            // openInNewOptionsItem 
            //  
            this.openInNewOptionsItem.Index = 0; 
            this.openInNewOptionsItem.Text = "在修改后新建图片(&N)"; 
            this.openInNewOptionsItem.Click += new System.EventHandler(this.openInNewOptionsItem_Click); 
            //  
            // rememberOptionsItem 
            //  
            this.rememberOptionsItem.Index = 1; 
            this.rememberOptionsItem.Text = "开启历史记录(&R)"; 
            this.rememberOptionsItem.Click += new System.EventHandler(this.rememberOptionsItem_Click); 
            //  
            // windowItem 
            //  
            this.windowItem.Index = 3; 
            this.windowItem.MdiList = true; 
            this.windowItem.MergeOrder = 3; 
            this.windowItem.Text = "窗体(&W)"; 
            //  
            // helpItem 
            //  
            this.helpItem.Index = 4; 
            this.helpItem.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
            this.aboutHelpItem}); 
            this.helpItem.MergeOrder = 4; 
            this.helpItem.Text = "帮助(&H)"; 
            //  
            // aboutHelpItem 
            //  
            this.aboutHelpItem.Index = 0; 
            this.aboutHelpItem.Text = "关于图像特效专家(&A)..."; 
            this.aboutHelpItem.Click += new System.EventHandler(this.aboutHelpItem_Click); 
            //  
            // statusBar 
            //  
            this.statusBar.Location = new System.Drawing.Point(0, 509); 
            this.statusBar.Name = "statusBar"; 
            this.statusBar.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] { 
            this.zoomPanel, 
            this.sizePanel, 
            this.selectionPanel, 
            this.colorPanel, 
            this.hslPanel, 
            this.ycbcrPanel, 
            this.infoPanel}); 
            this.statusBar.ShowPanels = true; 
            this.statusBar.Size = new System.Drawing.Size(792, 24); 
            this.statusBar.TabIndex = 1; 
            //  
            // zoomPanel 
            //  
            this.zoomPanel.Name = "zoomPanel"; 
            this.zoomPanel.ToolTipText = "Zoom coefficient"; 
            this.zoomPanel.Width = 50; 
            //  
            // sizePanel 
            //  
            this.sizePanel.Name = "sizePanel"; 
            this.sizePanel.ToolTipText = "Image size"; 
            //  
            // selectionPanel 
            //  
            this.selectionPanel.Name = "selectionPanel"; 
            this.selectionPanel.ToolTipText = "Current point and selection size"; 
            this.selectionPanel.Width = 120; 
            //  
            // colorPanel 
            //  
            this.colorPanel.Name = "colorPanel"; 
            this.colorPanel.ToolTipText = "Current color"; 
            this.colorPanel.Width = 110; 
            //  
            // hslPanel 
            //  
            this.hslPanel.Name = "hslPanel"; 
            this.hslPanel.Width = 130; 
            //  
            // ycbcrPanel 
            //  
            this.ycbcrPanel.Name = "ycbcrPanel"; 
            this.ycbcrPanel.Width = 145; 
            //  
            // infoPanel 
            //  
            this.infoPanel.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring; 
            this.infoPanel.Name = "infoPanel"; 
            this.infoPanel.Width = 118; 
            //  
            // panel1 
            //  
            this.panel1.Controls.Add(this.dockManager); 
            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; 
            this.panel1.Location = new System.Drawing.Point(0, 0); 
            this.panel1.Name = "panel1"; 
            this.panel1.Size = new System.Drawing.Size(792, 509); 
            this.panel1.TabIndex = 2; 
            //  
            // dockManager 
            //  
            this.dockManager.ActiveAutoHideContent = null; 
            this.dockManager.Controls.Add(this.mainToolBar); 
            this.dockManager.Controls.Add(this.imageToolBar); 
            this.dockManager.Dock = System.Windows.Forms.DockStyle.Fill; 
            this.dockManager.Location = new System.Drawing.Point(0, 0); 
            this.dockManager.Name = "dockManager"; 
            this.dockManager.Size = new System.Drawing.Size(792, 509); 
            this.dockManager.TabIndex = 2; 
            this.dockManager.ActiveDocumentChanged += new System.EventHandler(this.dockManager_ActiveDocumentChanged); 
            //  
            // mainToolBar 
            //  
            this.mainToolBar.Appearance = System.Windows.Forms.ToolBarAppearance.Flat; 
            this.mainToolBar.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { 
            this.openButton, 
            this.saveButton, 
            this.sep1, 
            this.copyButton, 
            this.pasteButton, 
            this.toolBarButton9, 
            this.histogramButton, 
            this.toolBarButton4, 
            this.aboutButton}); 
            this.mainToolBar.Divider = false; 
            this.mainToolBar.Dock = System.Windows.Forms.DockStyle.None; 
            this.mainToolBar.DropDownArrows = true; 
            this.mainToolBar.ImageList = this.imageList; 
            this.mainToolBar.Location = new System.Drawing.Point(307, 34); 
            this.mainToolBar.Name = "mainToolBar"; 
            this.mainToolBar.ShowToolTips = true; 
            this.mainToolBar.Size = new System.Drawing.Size(29, 202); 
            this.mainToolBar.TabIndex = 2; 
            this.mainToolBar.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.mainToolBar_ButtonClick); 
            //  
            // openButton 
            //  
            this.openButton.ImageIndex = 0; 
            this.openButton.Name = "openButton"; 
            this.openButton.ToolTipText = "Open an image "; 
            //  
            // saveButton 
            //  
            this.saveButton.ImageIndex = 1; 
            this.saveButton.Name = "saveButton"; 
            this.saveButton.ToolTipText = "Save"; 
            //  
            // sep1 
            //  
            this.sep1.Name = "sep1"; 
            this.sep1.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // copyButton 
            //  
            this.copyButton.ImageIndex = 2; 
            this.copyButton.Name = "copyButton"; 
            this.copyButton.ToolTipText = "Copy to clipboard"; 
            //  
            // pasteButton 
            //  
            this.pasteButton.ImageIndex = 3; 
            this.pasteButton.Name = "pasteButton"; 
            this.pasteButton.ToolTipText = "Paste from clipboard"; 
            //  
            // toolBarButton9 
            //  
            this.toolBarButton9.Name = "toolBarButton9"; 
            this.toolBarButton9.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // histogramButton 
            //  
            this.histogramButton.ImageIndex = 4; 
            this.histogramButton.Name = "histogramButton"; 
            this.histogramButton.ToolTipText = "Show histogram"; 
            //  
            // toolBarButton4 
            //  
            this.toolBarButton4.Name = "toolBarButton4"; 
            this.toolBarButton4.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // aboutButton 
            //  
            this.aboutButton.ImageIndex = 5; 
            this.aboutButton.Name = "aboutButton"; 
            this.aboutButton.ToolTipText = "About"; 
            //  
            // imageList 
            //  
            this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); 
            this.imageList.TransparentColor = System.Drawing.Color.Transparent; 
            this.imageList.Images.SetKeyName(0, ""); 
            this.imageList.Images.SetKeyName(1, ""); 
            this.imageList.Images.SetKeyName(2, ""); 
            this.imageList.Images.SetKeyName(3, ""); 
            this.imageList.Images.SetKeyName(4, ""); 
            this.imageList.Images.SetKeyName(5, ""); 
            //  
            // imageToolBar 
            //  
            this.imageToolBar.Appearance = System.Windows.Forms.ToolBarAppearance.Flat; 
            this.imageToolBar.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] { 
            this.cloneButton, 
            this.toolBarButton1, 
            this.cropButton, 
            this.toolBarButton2, 
            this.zoomInButton, 
            this.zoomOutButton, 
            this.toolBarButton3, 
            this.fitToScreenButton, 
            this.toolBarButton5, 
            this.resizeButton, 
            this.rotateButton, 
            this.toolBarButton7, 
            this.levelsButton, 
            this.grayscaleButton, 
            this.thresholdButton, 
            this.toolBarButton6, 
            this.morphologyButton, 
            this.convolutionButton, 
            this.toolBarButton8, 
            this.saturationButton, 
            this.fourierButton}); 
            this.imageToolBar.Divider = false; 
            this.imageToolBar.Dock = System.Windows.Forms.DockStyle.None; 
            this.imageToolBar.DropDownArrows = true; 
            this.imageToolBar.ImageList = this.imageList2; 
            this.imageToolBar.Location = new System.Drawing.Point(173, 336); 
            this.imageToolBar.Name = "imageToolBar"; 
            this.imageToolBar.ShowToolTips = true; 
            this.imageToolBar.Size = new System.Drawing.Size(566, 26); 
            this.imageToolBar.TabIndex = 3; 
            this.imageToolBar.ButtonClick += new System.Windows.Forms.ToolBarButtonClickEventHandler(this.imageToolBar_ButtonClick); 
            //  
            // cloneButton 
            //  
            this.cloneButton.ImageIndex = 0; 
            this.cloneButton.Name = "cloneButton"; 
            this.cloneButton.ToolTipText = "Clone the image"; 
            //  
            // toolBarButton1 
            //  
            this.toolBarButton1.Name = "toolBarButton1"; 
            this.toolBarButton1.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // cropButton 
            //  
            this.cropButton.ImageIndex = 1; 
            this.cropButton.Name = "cropButton"; 
            this.cropButton.ToolTipText = "Crop image"; 
            //  
            // toolBarButton2 
            //  
            this.toolBarButton2.Name = "toolBarButton2"; 
            this.toolBarButton2.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // zoomInButton 
            //  
            this.zoomInButton.ImageIndex = 2; 
            this.zoomInButton.Name = "zoomInButton"; 
            this.zoomInButton.ToolTipText = "Zoom In"; 
            //  
            // zoomOutButton 
            //  
            this.zoomOutButton.ImageIndex = 3; 
            this.zoomOutButton.Name = "zoomOutButton"; 
            this.zoomOutButton.ToolTipText = "Zoom out"; 
            //  
            // toolBarButton3 
            //  
            this.toolBarButton3.ImageIndex = 4; 
            this.toolBarButton3.Name = "toolBarButton3"; 
            this.toolBarButton3.ToolTipText = "Original size"; 
            //  
            // fitToScreenButton 
            //  
            this.fitToScreenButton.ImageIndex = 5; 
            this.fitToScreenButton.Name = "fitToScreenButton"; 
            this.fitToScreenButton.ToolTipText = "Fit to window size"; 
            //  
            // toolBarButton5 
            //  
            this.toolBarButton5.Name = "toolBarButton5"; 
            this.toolBarButton5.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // resizeButton 
            //  
            this.resizeButton.ImageIndex = 11; 
            this.resizeButton.Name = "resizeButton"; 
            this.resizeButton.ToolTipText = "Resize the image"; 
            //  
            // rotateButton 
            //  
            this.rotateButton.ImageIndex = 12; 
            this.rotateButton.Name = "rotateButton"; 
            this.rotateButton.ToolTipText = "Rotate the image"; 
            //  
            // toolBarButton7 
            //  
            this.toolBarButton7.Name = "toolBarButton7"; 
            this.toolBarButton7.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // levelsButton 
            //  
            this.levelsButton.ImageIndex = 6; 
            this.levelsButton.Name = "levelsButton"; 
            this.levelsButton.ToolTipText = "Levels correction"; 
            //  
            // grayscaleButton 
            //  
            this.grayscaleButton.ImageIndex = 7; 
            this.grayscaleButton.Name = "grayscaleButton"; 
            this.grayscaleButton.ToolTipText = "Grayscale"; 
            //  
            // thresholdButton 
            //  
            this.thresholdButton.ImageIndex = 8; 
            this.thresholdButton.Name = "thresholdButton"; 
            this.thresholdButton.ToolTipText = "Threshold"; 
            //  
            // toolBarButton6 
            //  
            this.toolBarButton6.Name = "toolBarButton6"; 
            this.toolBarButton6.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // morphologyButton 
            //  
            this.morphologyButton.ImageIndex = 9; 
            this.morphologyButton.Name = "morphologyButton"; 
            this.morphologyButton.ToolTipText = "Custom morphology operator"; 
            //  
            // convolutionButton 
            //  
            this.convolutionButton.ImageIndex = 10; 
            this.convolutionButton.Name = "convolutionButton"; 
            this.convolutionButton.ToolTipText = "Custom convolution operator"; 
            //  
            // toolBarButton8 
            //  
            this.toolBarButton8.Name = "toolBarButton8"; 
            this.toolBarButton8.Style = System.Windows.Forms.ToolBarButtonStyle.Separator; 
            //  
            // saturationButton 
            //  
            this.saturationButton.ImageIndex = 13; 
            this.saturationButton.Name = "saturationButton"; 
            this.saturationButton.ToolTipText = "Saturation (HSL)"; 
            //  
            // fourierButton 
            //  
            this.fourierButton.ImageIndex = 14; 
            this.fourierButton.Name = "fourierButton"; 
            this.fourierButton.ToolTipText = "Fourier Transformation"; 
            //  
            // imageList2 
            //  
            this.imageList2.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList2.ImageStream"))); 
            this.imageList2.TransparentColor = System.Drawing.Color.Transparent; 
            this.imageList2.Images.SetKeyName(0, ""); 
            this.imageList2.Images.SetKeyName(1, ""); 
            this.imageList2.Images.SetKeyName(2, ""); 
            this.imageList2.Images.SetKeyName(3, ""); 
            this.imageList2.Images.SetKeyName(4, ""); 
            this.imageList2.Images.SetKeyName(5, ""); 
            this.imageList2.Images.SetKeyName(6, ""); 
            this.imageList2.Images.SetKeyName(7, ""); 
            this.imageList2.Images.SetKeyName(8, ""); 
            this.imageList2.Images.SetKeyName(9, ""); 
            this.imageList2.Images.SetKeyName(10, ""); 
            this.imageList2.Images.SetKeyName(11, ""); 
            this.imageList2.Images.SetKeyName(12, ""); 
            this.imageList2.Images.SetKeyName(13, ""); 
            this.imageList2.Images.SetKeyName(14, ""); 
            //  
            // ofd 
            //  
            this.ofd.Filter = "Image files (*.jpg,*.png,*.tif,*.bmp,*.gif)|*.jpg;*.png;*.tif;*.bmp;*.gif|JPG fil" + 
                "es (*.jpg)|*.jpg|PNG files (*.png)|*.png|TIF files (*.tif)|*.tif|BMP files (*.bm" + 
                "p)|*.bmp|GIF files (*.gif)|*.gif"; 
            this.ofd.Title = "Open image"; 
            //  
            // sfd 
            //  
            this.sfd.Filter = "JPG files (*.jpg)|*.jpg|BMP files (*.bmp)|*.bmp"; 
            this.sfd.Title = "Save image"; 
            //  
            // printDocument 
            //  
            this.printDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.printDocument_PrintPage); 
            //  
            // printPreviewDialog 
            //  
            this.printPreviewDialog.AutoScrollMargin = new System.Drawing.Size(0, 0); 
            this.printPreviewDialog.AutoScrollMinSize = new System.Drawing.Size(0, 0); 
            this.printPreviewDialog.ClientSize = new System.Drawing.Size(400, 300); 
            this.printPreviewDialog.Enabled = true; 
            this.printPreviewDialog.Icon = ((System.Drawing.Icon)(resources.GetObject("printPreviewDialog.Icon"))); 
            this.printPreviewDialog.Name = "printPreviewDialog"; 
            this.printPreviewDialog.Visible = false; 
            //  
            // MainForm 
            //  
            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); 
            this.ClientSize = new System.Drawing.Size(792, 533); 
            this.Controls.Add(this.panel1); 
            this.Controls.Add(this.statusBar); 
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 
            this.IsMdiContainer = true; 
            this.Menu = this.mainMenu; 
            this.Name = "MainForm"; 
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 
            this.Text = "图像特效专家v.2.4.0"; 
            this.Closing += new System.ComponentModel.CancelEventHandler(this.MainForm_Closing); 
            this.Load += new System.EventHandler(this.MainForm_Load); 
            ((System.ComponentModel.ISupportInitialize)(this.zoomPanel)).EndInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.sizePanel)).EndInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.selectionPanel)).EndInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.colorPanel)).EndInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.hslPanel)).EndInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.ycbcrPanel)).EndInit(); 
            ((System.ComponentModel.ISupportInitialize)(this.infoPanel)).EndInit(); 
            this.panel1.ResumeLayout(false); 
            this.dockManager.ResumeLayout(false); 
            this.dockManager.PerformLayout(); 
            this.ResumeLayout(false); 
 
		} 
		#endregion 
 
		///  
		/// The main entry point for the application. 
		///  
		[STAThread] 
		static void Main()  
		{ 
			Application.Run(new MainForm()); 
		} 
 
		#region IDocumentsHost implementation 
 
		// Create new document on change on existent or modify it 
		public bool CreateNewDocumentOnChange 
		{ 
			get { return config.openInNewDoc; } 
		} 
 
		// Remember or not an image, so we can back one step 
		public bool RememberOnChange 
		{ 
			get { return config.rememberOnChange; } 
		} 
 
		// Create new document 
		public bool NewDocument(Bitmap image) 
		{ 
			unnamedNumber++; 
 
			ImageDoc imgDoc = new ImageDoc(image, (IDocumentsHost) this); 
 
			imgDoc.Text = "Image " + unnamedNumber.ToString(); 
			imgDoc.Show(dockManager); 
			imgDoc.Focus(); 
 
			// set events 
			SetupDocumentEvents(imgDoc); 
 
			return true; 
		} 
 
		// Create new document for ComplexImage 
		public bool NewDocument(ComplexImage image) 
		{ 
			unnamedNumber++; 
 
			FourierDoc imgDoc = new FourierDoc(image, (IDocumentsHost) this); 
 
			imgDoc.Text = "Image " + unnamedNumber.ToString(); 
			imgDoc.Show(dockManager); 
			imgDoc.Focus(); 
 
			return true; 
		} 
 
		// Get an image with specified dimension and pixel format 
		public Bitmap GetImage(object sender, String text, Size size, PixelFormat format) 
		{ 
			ArrayList	names = new ArrayList(); 
			ArrayList	images = new ArrayList(); 
 
			foreach (Content doc in dockManager.Documents) 
			{ 
				if ((doc != sender) && (doc is ImageDoc)) 
				{ 
					Bitmap img = ((ImageDoc) doc).Image; 
 
					// check pixel format, width and height 
					if ((img.PixelFormat == format) && 
						((size.Width == -1) || 
						((img.Width == size.Width) && (img.Height == size.Height)))) 
					{ 
						names.Add(doc.Text); 
						images.Add(img); 
					} 
				} 
			} 
 
			SelectImageForm form = new SelectImageForm(); 
 
			form.Description = text; 
			form.ImageNames = names; 
 
			// allow user to select an image 
			if ((form.ShowDialog() == DialogResult.OK) && (form.SelectedItem != -1)) 
			{ 
				return (Bitmap) images[form.SelectedItem]; 
			} 
 
			return null; 
		} 
 
		#endregion 
 
		// On form closing 
		private void MainForm_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
		{ 
			// close all files 
			foreach (Content c in dockManager.Documents) 
				c.Close(); 
 
			// save configuration 
			config.mainWindowLocation = this.Location; 
			config.mainWindowSize = this.Size; 
			config.Save(configFile); 
			// save dock manager configuration 
			dockManager.SaveAsXml(dockManagerConfigFile); 
		} 
 
		// On form load 
		private void MainForm_Load(object sender, System.EventArgs e) 
		{ 
			// load configuration 
			if (config.Load(configFile)) 
			{ 
				this.Location = config.mainWindowLocation; 
				this.Size = config.mainWindowSize; 
			} 
 
			try 
			{ 
				// load dock manager configuration 
				if (File.Exists(dockManagerConfigFile)) 
					dockManager.LoadFromXml(dockManagerConfigFile, new GetContentCallback(GetContentFromPersistString)); 
			} 
			catch (Exception) 
			{ 
			} 
 
			// show histogram 
			ShowHistogram(config.histogramVisible); 
		} 
 
		// Callback for loading Dock Manager 
		private Content GetContentFromPersistString(string persistString) 
		{ 
			if (persistString == typeof(HistogramWindow).ToString()) 
				return histogramWin; 
			if (persistString == typeof(ImageStatisticsWindow).ToString()) 
				return statisticsWin; 
 
			return null; 
		} 
 
		// Main tool bar clicked 
		private void mainToolBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) 
		{ 
			switch (e.Button.ImageIndex) 
			{ 
				case 0:		// open an image 
					OpenFile(); 
					break; 
				case 1:		// save file 
					SaveFile(); 
					break; 
				case 2:		// copy 
					CopyToClipboard(); 
					break; 
				case 3:		// paste 
					PasteFromClipboard(); 
					break; 
				case 4:		// show histogram window 
					ShowHistogram(!config.histogramVisible); 
					break; 
				case 5:		//about 
					About(); 
					break; 
			} 
		} 
 
		// active document changed 
		private void dockManager_ActiveDocumentChanged(object sender, System.EventArgs e) 
		{ 
			Content		doc = dockManager.ActiveDocument; 
			ImageDoc	imgDoc = (doc is ImageDoc) ? (ImageDoc) doc : null; 
 
			UpdateHistogram(imgDoc); 
			UpdateStatistics(imgDoc); 
			UpdateZoomStatus(imgDoc); 
 
			UpdateSizeStatus(doc); 
		} 
 
		// About 
		private void About() 
		{ 
			AboutForm	about = new AboutForm(); 
 
			about.ShowDialog(); 
		} 
 
		// On "Help->About" 
		private void aboutHelpItem_Click(object sender, System.EventArgs e) 
		{ 
			About(); 
		} 
 
		// on File item popum - set state ot child menu items 
		private void fileItem_Popup(object sender, System.EventArgs e) 
		{ 
			Content	doc = dockManager.ActiveDocument; 
			bool	docOpened = (doc != null); 
 
			closeFileItem.Enabled = docOpened; 
			closeAllFileItem.Enabled = (dockManager.Documents.Length > 0); 
			reloadFileItem.Enabled = ((docOpened) && (doc is ImageDoc) && (((ImageDoc) doc).FileName != null)); 
 
			saveFileItem.Enabled = docOpened; 
			copyFileItem.Enabled = docOpened; 
			pasteFileItem.Enabled = (Clipboard.GetDataObject().GetDataPresent(DataFormats.Bitmap)); 
 
			printFileItem.Enabled = docOpened; 
			printPreviewFileItem.Enabled = docOpened; 
		} 
 
		// Exit application 
		private void exitFileItem_Click(object sender, System.EventArgs e) 
		{ 
			Close(); 
		} 
 
		// Setup events 
		private void SetupDocumentEvents(ImageDoc doc) 
		{ 
			doc.DocumentChanged += new System.EventHandler(this.document_DocumentChanged); 
			doc.ZoomChanged += new System.EventHandler(this.document_ZoomChanged); 
			doc.MouseImagePosition += new ImageDoc.SelectionEventHandler(this.document_MouseImagePosition); 
			doc.SelectionChanged += new ImageDoc.SelectionEventHandler(this.document_SelectionChanged); 
		} 
 
		// Open file 
		private void OpenFile() 
		{ 
			if (ofd.ShowDialog() == DialogResult.OK) 
			{ 
				ImageDoc imgDoc = null; 
				 
				try 
				{ 
					// create image document 
					imgDoc = new ImageDoc(ofd.FileName, (IDocumentsHost) this); 
					imgDoc.Text = Path.GetFileName(ofd.FileName); 
 
				} 
				catch (ApplicationException ex) 
				{ 
					MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
				} 
 
				if (imgDoc != null) 
				{ 
					imgDoc.Show(dockManager); 
					imgDoc.Focus(); 
 
					// set events 
					SetupDocumentEvents(imgDoc); 
				} 
			}		 
		} 
 
		// Show/hide histogram 
		private void ShowHistogram(bool show) 
		{ 
			config.histogramVisible = show; 
 
			histogramViewItem.Checked = show; 
			histogramButton.Pushed = show; 
 
			if (show) 
			{ 
				histogramWin.Show(dockManager); 
			} 
			else 
			{ 
				histogramWin.Hide(); 
			} 
		} 
 
		// Show/hide statistics 
		private void ShowStatistics(bool show) 
		{ 
			config.statisticsVisible = show; 
 
			statisticsViewItem.Checked = show; 
 
			if ( show ) 
			{ 
				statisticsWin.Show( dockManager ); 
			} 
			else 
			{ 
				statisticsWin.Hide( ); 
			} 
		} 
 
 
 
		// On "File->Open" item clicked 
		private void OpenItem_Click(object sender, System.EventArgs e) 
		{ 
			OpenFile(); 
		} 
 
		// Reload file 
		private void reloadFileItem_Click(object sender, System.EventArgs e) 
		{ 
			Content	doc = dockManager.ActiveDocument; 
 
			if ((doc != null) && (doc is ImageDoc)) 
			{ 
				try 
				{ 
					((ImageDoc) doc).Reload(); 
				} 
				catch (ApplicationException ex) 
				{ 
					MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
				} 
			} 
		} 
 
		// Save file 
		private void SaveFile() 
		{ 
			Content	doc = dockManager.ActiveDocument; 
 
			if (doc != null) 
			{ 
				// set initial file name 
				if ((doc is ImageDoc) && (((ImageDoc) doc).FileName != null)) 
				{ 
					sfd.FileName = Path.GetFileName(((ImageDoc) doc).FileName); 
				} 
				else 
				{ 
					sfd.FileName = doc.Text + ".jpg"; 
				} 
 
				sfd.FilterIndex = 0; 
 
				// show dialog 
				if (sfd.ShowDialog(this) == DialogResult.OK) 
				{ 
					ImageFormat format = ImageFormat.Jpeg; 
 
					// resolve file format 
					switch (Path.GetExtension(sfd.FileName).ToLower()) 
					{ 
						case ".jpg": 
							format = ImageFormat.Jpeg; 
							break; 
						case ".bmp": 
							format = ImageFormat.Bmp; 
							break; 
						default: 
							MessageBox.Show(this, "Unsupported image format was specified", "Error", 
								MessageBoxButtons.OK, MessageBoxIcon.Error); 
							return; 
					} 
 
					// save the image 
					try 
					{ 
						if (doc is ImageDoc) 
						{ 
							((ImageDoc) doc).Image.Save(sfd.FileName, format); 
						} 
						if (doc is FourierDoc) 
						{ 
							((FourierDoc) doc).Image.Save(sfd.FileName, format); 
						} 
					} 
					catch (Exception) 
					{ 
						MessageBox.Show(this, "Failed writing image file", "Error", 
							MessageBoxButtons.OK, MessageBoxIcon.Error); 
					} 
				} 
			} 
		} 
 
		// On "File->Save" - save the file 
		private void saveFileItem_Click(object sender, System.EventArgs e) 
		{ 
			SaveFile(); 
		} 
 
		// Copy image to clipboard 
		private void CopyToClipboard() 
		{ 
			Content	doc = dockManager.ActiveDocument; 
 
			if (doc != null) 
			{ 
				if (doc is ImageDoc) 
				{ 
					Clipboard.SetDataObject(((ImageDoc) doc).Image, true); 
				} 
				if (doc is FourierDoc) 
				{ 
					Clipboard.SetDataObject(((FourierDoc) doc).Image, true); 
				} 
			} 
		} 
 
		// On "File->Copy" - copy image to clipboard 
		private void copyFileItem_Click(object sender, System.EventArgs e) 
		{ 
			CopyToClipboard(); 
		} 
 
		// Paste image from clipboard 
		private void PasteFromClipboard() 
		{ 
			if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Bitmap)) 
			{ 
				ImageDoc imgDoc = new ImageDoc((Bitmap) Clipboard.GetDataObject().GetData(DataFormats.Bitmap), (IDocumentsHost) this); 
 
				imgDoc.Text = "Image " + unnamedNumber.ToString(); 
				imgDoc.Show(dockManager); 
				imgDoc.Focus(); 
 
				// set events 
				SetupDocumentEvents(imgDoc); 
			} 
		} 
 
		// On "File->Paste" - paste image from clipboard 
		private void pasteFileItem_Click(object sender, System.EventArgs e) 
		{ 
			PasteFromClipboard(); 
		} 
 
		// Close file 
		private void closeFileItem_Click(object sender, System.EventArgs e) 
		{ 
			if (dockManager.ActiveDocument != null) 
				dockManager.ActiveDocument.Close(); 
		} 
 
		// Close all files 
		private void closeAllFileItem_Click(object sender, System.EventArgs e) 
		{ 
			foreach (Content c in dockManager.Documents) 
				c.Close(); 
		} 
 
		// Page setup 
		private void pageSetupFileItem_Click(object sender, System.EventArgs e) 
		{ 
			try 
			{ 
				pageSetupDialog.Document = printDocument; 
				pageSetupDialog.ShowDialog(); 
			} 
			catch (InvalidPrinterException) 
			{ 
				MessageBox.Show(this, "Failed accessing printer device", "Error", 
					MessageBoxButtons.OK, MessageBoxIcon.Error); 
			} 
		} 
 
		// Print image 
		private void printFileItem_Click(object sender, System.EventArgs e) 
		{ 
			if (dockManager.ActiveDocument != null) 
			{ 
				try 
				{ 
					printDialog.Document = printDocument; 
					if (printDialog.ShowDialog() == DialogResult.OK) 
					{ 
						printDocument.Print(); 
					} 
				} 
				catch (InvalidPrinterException) 
				{ 
					MessageBox.Show(this, "Failed accessing printer device", "Error", 
						MessageBoxButtons.OK, MessageBoxIcon.Error); 
				} 
			} 
		} 
 
		// Print preview 
		private void printPreviewFileItem_Click(object sender, System.EventArgs e) 
		{ 
			if (dockManager.ActiveDocument != null) 
			{ 
				try 
				{ 
					printPreviewDialog.Document = printDocument; 
					printPreviewDialog.ShowDialog(); 
				} 
				catch (InvalidPrinterException) 
				{ 
					MessageBox.Show(this, "Failed accessing printer device", "Error", 
						MessageBoxButtons.OK, MessageBoxIcon.Error); 
				} 
			}		 
		} 
 
		// On "Options" popup 
		private void optionsItem_Popup(object sender, System.EventArgs e) 
		{ 
			this.openInNewOptionsItem.Checked = config.openInNewDoc; 
			this.rememberOptionsItem.Checked = config.rememberOnChange; 
		} 
 
		// On "Options->Open in new Document" click 
		private void openInNewOptionsItem_Click(object sender, System.EventArgs e) 
		{ 
			config.openInNewDoc = !config.openInNewDoc; 
		} 
 
		// On "Options->Remember on change" click 
		private void rememberOptionsItem_Click(object sender, System.EventArgs e) 
		{ 
			config.rememberOnChange = !config.rememberOnChange; 
		} 
 
		// On "View" popup 
		private void viewItem_Popup(object sender, System.EventArgs e) 
		{ 
			centerViewItem.Enabled = ((dockManager.ActiveDocument != null) && (dockManager.ActiveDocument is ImageDoc)); 
 
			ToolBarDockHolder holder; 
			// Main tool bar 
			holder = toolBarManager.GetHolder(mainToolBar); 
			mainBarViewItem.Checked = holder.Visible; 
			// Image tool bar 
			holder = toolBarManager.GetHolder(imageToolBar); 
			imageBarViewItem.Checked = holder.Visible; 
		} 
 
		// On "View->Histogram" - show histogram 
		private void histogramViewItem_Click(object sender, System.EventArgs e) 
		{ 
			ShowHistogram( !config.histogramVisible ); 
		} 
 
		// On "View->Statistics" - show histogram 
		private void statisticsViewItem_Click(object sender, System.EventArgs e) 
		{ 
			ShowStatistics( !config.statisticsVisible ); 
		} 
 
		// Histogram visibility changed		 
		private void histogram_VisibleChanged(object sender, System.EventArgs e) 
		{ 
			if ( histogramWin.Visible ) 
				histogramWin.GatherStatistics( ( ( dockManager.ActiveDocument == null ) || !( dockManager.ActiveDocument is ImageDoc ) ) ? null : ((ImageDoc) dockManager.ActiveDocument).Image ); 
		} 
 
		// Statistics visibility changed		 
		private void statistics_VisibleChanged(object sender, System.EventArgs e) 
		{ 
			if ( statisticsWin.Visible ) 
				statisticsWin.GatherStatistics( ( ( dockManager.ActiveDocument == null ) || !( dockManager.ActiveDocument is ImageDoc ) ) ? null : ((ImageDoc) dockManager.ActiveDocument).Image ); 
		} 
 
		// On "View->Center" - center image 
		private void centerViewItem_Click(object sender, System.EventArgs e) 
		{ 
			Content	doc = dockManager.ActiveDocument; 
 
			if ((doc != null) && (doc is ImageDoc)) 
				((ImageDoc) doc).Center(); 
		} 
 
		// Switch histogram to red channel 
		private void redHistogramViewItem_Click(object sender, System.EventArgs e) 
		{ 
			if (histogramWin.Visible) 
				histogramWin.SwitchChannel(0); 
		} 
 
		// Switch histogram to green channel 
		private void greenHistogramViewItem_Click(object sender, System.EventArgs e) 
		{ 
			if (histogramWin.Visible) 
				histogramWin.SwitchChannel(1); 
		} 
 
		// Switch histogram to blue channel 
		private void blueHistogramViewItem_Click(object sender, System.EventArgs e) 
		{ 
			if (histogramWin.Visible) 
				histogramWin.SwitchChannel(2); 
		} 
 
		// On document changed 
		private void document_DocumentChanged(object sender, System.EventArgs e) 
		{ 
			UpdateHistogram((ImageDoc) sender); 
			UpdateStatistics((ImageDoc) sender); 
			UpdateSizeStatus((ImageDoc) sender); 
		} 
 
		// On zoom factor changed 
		private void document_ZoomChanged(object sender, System.EventArgs e) 
		{ 
			UpdateZoomStatus((ImageDoc) sender); 
		} 
 
		// On mouse position over image changed 
		private void document_MouseImagePosition(object sender, SelectionEventArgs e) 
		{ 
			if (e.Location.X >= 0) 
			{ 
				this.selectionPanel.Text = string.Format( "({0}, {1})", e.Location.X, e.Location.Y ); 
 
				// get current color 
				Bitmap image = ((ImageDoc) sender).Image; 
				if (image.PixelFormat == PixelFormat.Format24bppRgb) 
				{ 
					Color	color = image.GetPixel(e.Location.X, e.Location.Y); 
					RGB		rgb = new RGB( color ); 
					YCbCr	ycbcr = new YCbCr( ); 
 
					AForge.Imaging.ColorConverter.RGB2YCbCr( rgb, ycbcr ); 
 
					// RGB 
					this.colorPanel.Text = string.Format( "RGB: {0}; {1}; {2}", color.R, color.G, color.B ); 
					// HSL 
					this.hslPanel.Text = string.Format( "HSL: {0}; {1:F3}; {2:F3}", (int) color.GetHue(), color.GetSaturation(), color.GetBrightness() ); 
					// YCbCr 
					this.ycbcrPanel.Text = string.Format( "YCbCr: {0:F3}; {1:F3}; {2:F3}", ycbcr.Y, ycbcr.Cb, ycbcr.Cr ); 
				} 
				else if (image.PixelFormat == PixelFormat.Format8bppIndexed) 
				{ 
					Color color = image.GetPixel(e.Location.X, e.Location.Y); 
					this.colorPanel.Text	= "Gray: " + color.R.ToString(); 
					this.hslPanel.Text		= ""; 
					this.ycbcrPanel.Text	= ""; 
				} 
			} 
			else 
			{ 
				this.selectionPanel.Text	= ""; 
				this.colorPanel.Text		= ""; 
				this.hslPanel.Text			= ""; 
				this.ycbcrPanel.Text		= ""; 
			} 
		} 
 
		// On selection changed 
		private void document_SelectionChanged(object sender, SelectionEventArgs e) 
		{ 
			this.selectionPanel.Text = string.Format( "({0}, {1}) - {2} x {3}", e.Location.X, e.Location.Y, e.Size.Width, e.Size.Height ); 
		} 
 
		// Update histogram 
		private void UpdateHistogram(ImageDoc imgDoc) 
		{ 
			if ( histogramWin.Visible ) 
				histogramWin.GatherStatistics( ( imgDoc == null ) ? null : imgDoc.Image ); 
		} 
 
		private void UpdateStatistics( ImageDoc imgDoc ) 
		{ 
			if ( statisticsWin.Visible ) 
				statisticsWin.GatherStatistics( ( imgDoc == null ) ? null : imgDoc.Image ); 
		} 
 
		// Update size status 
		private void UpdateSizeStatus(Content doc) 
		{ 
			if (doc != null) 
			{ 
				int w = 0, h = 0; 
 
				if (doc is ImageDoc) 
				{ 
					w = ((ImageDoc) doc).ImageWidth; 
					h = ((ImageDoc) doc).ImageHeight; 
				} 
				else if (doc is FourierDoc) 
				{ 
					w = ((FourierDoc) doc).ImageWidth; 
					h = ((FourierDoc) doc).ImageHeight; 
				} 
 
				sizePanel.Text = w.ToString() + " x " + h.ToString(); 
			} 
			else 
			{ 
				sizePanel.Text = String.Empty; 
			} 
		} 
 
		// Update zoom status 
		private void UpdateZoomStatus(ImageDoc imgDoc) 
		{ 
			if (imgDoc != null) 
			{ 
				int zoom = (int)(imgDoc.Zoom * 100); 
				zoomPanel.Text = zoom.ToString() + "%"; 
			} 
			else 
			{ 
				zoomPanel.Text = String.Empty; 
			} 
		} 
 
		// On image toolbar clicked 
		private void imageToolBar_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) 
		{ 
			Content	doc = dockManager.ActiveDocument; 
 
			if (doc != null) 
			{ 
				if (doc is ImageDoc) 
				{ 
					ImageDocCommands[] cmd = new ImageDocCommands[] 
					{ 
						ImageDocCommands.Clone, ImageDocCommands.Crop, 
						ImageDocCommands.ZoomIn, ImageDocCommands.ZoomOut, 
						ImageDocCommands.ZoomOriginal, ImageDocCommands.FitToSize, 
						ImageDocCommands.Levels, ImageDocCommands.Grayscale, 
						ImageDocCommands.Threshold, ImageDocCommands.Morphology, 
						ImageDocCommands.Convolution, ImageDocCommands.Resize, 
						ImageDocCommands.Rotate, ImageDocCommands.Saturation, 
						ImageDocCommands.Fourier 
					}; 
 
					((ImageDoc) doc).ExecuteCommand(cmd[e.Button.ImageIndex]); 
				} 
			} 
		} 
 
		// On "View->Main Tool bar" menu item click 
		private void mainBarViewItem_Click(object sender, System.EventArgs e) 
		{ 
			ToolBarDockHolder holder = toolBarManager.GetHolder(mainToolBar); 
			toolBarManager.ShowControl(mainToolBar, !holder.Visible); 
		} 
 
		// On "View->Image Tool bar" menu item click 
		private void imageBarViewItem_Click(object sender, System.EventArgs e) 
		{ 
			ToolBarDockHolder holder = toolBarManager.GetHolder(imageToolBar); 
			toolBarManager.ShowControl(imageToolBar, !holder.Visible); 
		} 
 
		// Histogram docking state changed 
		private void histogram_DockStateChanged(object sender, System.EventArgs e) 
		{ 
			if ( histogramWin.DockState != DockState.Unknown ) 
			{ 
				bool visible = (histogramWin.DockState != DockState.Hidden); 
 
				// save to config 
				config.histogramVisible = visible; 
 
				// update menu & tool bar 
				histogramViewItem.Checked = visible; 
				histogramButton.Pushed = visible; 
			} 
		} 
 
		// Statistics docking state changed 
		private void statistics_DockStateChanged(object sender, System.EventArgs e) 
		{ 
			if ( statisticsWin.DockState != DockState.Unknown ) 
			{ 
				bool visible = (statisticsWin.DockState != DockState.Hidden); 
 
				// save to config 
				config.statisticsVisible = visible; 
 
				// update menu & tool bar 
				statisticsViewItem.Checked = visible; 
			} 
		} 
 
		// Print document page 
		private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) 
		{ 
			Content	doc = dockManager.ActiveDocument; 
 
			if (doc != null) 
			{ 
				Bitmap image = null; 
 
				// get an image to print 
				if (doc is ImageDoc) 
				{ 
					image = ((ImageDoc) doc).Image; 
				} 
				else if (doc is FourierDoc) 
				{ 
					image = ((FourierDoc) doc).Image; 
				} 
 
				System.Diagnostics.Debug.WriteLine("X: " + e.MarginBounds.Left + ", Y = " + e.MarginBounds.Top + ", width = " + e.MarginBounds.Width + ", height = " + e.MarginBounds.Height); 
				System.Diagnostics.Debug.WriteLine("X: " + e.PageBounds.Left + ", Y = " + e.PageBounds.Top + ", width = " + e.PageBounds.Width + ", height = " + e.PageBounds.Height); 
 
				int		width = image.Width; 
				int		height = image.Height; 
 
				if ((width > e.MarginBounds.Width) || (height > e.MarginBounds.Height)) 
				{ 
					float f = Math.Min((float) e.MarginBounds.Width / width, (float) e.MarginBounds.Height / height); 
 
					width = (int)(f * width); 
					height = (int)(f * height); 
				} 
 
				e.Graphics.DrawImage(image, e.MarginBounds.Left, e.MarginBounds.Top, width, height); 
			} 
		} 
	} 
}