基本信息
源码名称:C# ORC图像处理例子
源码大小:0.77M
文件格式:.rar
开发语言:C#
更新时间:2015-05-06
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace 图像识别
{
    public partial class Form1 : Form
    {
        private int num_old_x;
        private int num_old_y;
        private int num_new_x;
        private int num_new_y;
        private int x;
        private int y;
        private bool bool_MouseDown = false;
        private bool bool_beginCutPic = false;
        private bool bool_beginIdentify = false;
        Bitmap OldBT;
        Bitmap NewBT;
        Bitmap Source;
        //用于窗体拖动
        private bool bool_begin_move = false;
        private int num_mouseDown_X = 0;
        private int num_mouseDown_Y = 0;

        public Form1()
        {
            InitializeComponent();
        }

       
        //
        //图像区域选择
        //
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            pictureBox1.Refresh();
            if (pictureBox1.BackgroundImage != null && bool_beginCutPic==true)
            {
                bool_MouseDown = true;
                num_old_x = MousePosition.X;
                num_old_y = MousePosition.Y;
            }
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (bool_MouseDown == true)
            {

                num_new_x = MousePosition.X;
                num_new_y = MousePosition.Y;

                x = num_old_x - this.Location.X - pictureBox1.Location.X;
                y = num_old_y - this.Location.Y - pictureBox1.Location.Y;

                
                Graphics g = pictureBox1.CreateGraphics();
                g.DrawRectangle(Pens.White, x, y, num_new_x - num_old_x, num_new_y - num_old_y);
                
                
                pictureBox1.Refresh();
            }

        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            if (bool_MouseDown == true)
            {

                bool_MouseDown = false;

                Graphics g = pictureBox1.CreateGraphics();
                g.DrawRectangle(Pens.White, x, y, num_new_x - num_old_x, num_new_y - num_old_y);

                Bitmap bt = new Bitmap(num_new_x - num_old_x, num_new_y - num_old_y);

                for (int i = x; i < x   num_new_x - num_old_x; i  )
                {
                    for (int j = y; j < y   num_new_y - num_old_y; j  )
                    {
                        bt.SetPixel(i - x, j - y, OldBT.GetPixel(i, j));
                    }
                }
                pictureBox2.BackgroundImage = bt;
                NewBT = bt;
                Source = bt;
                开始识别ToolStripMenuItem.Enabled = true;
                lab_info.Text = "请开始进行开始提取操作.";
                
            }
        }
        //
        //最小化和退出程序
        //
        private void labelX1_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }

        private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        //
        //窗体拖动
        //
        private void labelX2_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                bool_begin_move = true;
                num_mouseDown_X = e.X;
                num_mouseDown_Y = e.Y;
            }
        }
     
        private void labelX2_MouseMove(object sender, MouseEventArgs e)
        {

            if (bool_begin_move)
            {
                Point temp = new Point(0, 0);

                temp.X = this.Location.X   (e.X - num_mouseDown_X);
                temp.Y = this.Location.Y   (e.Y - num_mouseDown_Y);
                this.Location = temp;
            }
        }

        private void labelX2_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                bool_begin_move = false;
        }
        //
        //打开新图片
        //
        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "jpg,bmp files (*.jpg,*jpeg,*.bmp)|*.jpg;*.bmp;*.jpeg";
            ofd.FilterIndex = 1;
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                OldBT = new Bitmap(ofd.FileName);
                pictureBox1.BackgroundImage = OldBT;
                开始截图ToolStripMenuItem.Enabled = true;
                lab_info.Text = "请进行开始截图或者对图像进行黑白变换操作.";
                if (黑贝变换ToolStripMenuItem.Enabled == false)
                {
                    黑贝变换ToolStripMenuItem.Enabled = true;
                }
                this.DisplayScrollBars();
                this.SetScrollBarValues();
            }
        }
        //
        //pictureBox3的图片显示格式
        //
        private void strechToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox3.BackgroundImageLayout = ImageLayout.Stretch;
        }

        private void zoomToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox3.BackgroundImageLayout = ImageLayout.Zoom;
        }

        private void centerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox3.BackgroundImageLayout = ImageLayout.Center;
        }

        private void noneToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox3.BackgroundImageLayout = ImageLayout.None;
        }
        //
        //开始截图和识别
        //
        private void 开始截图ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bool_beginCutPic = true;
            lab_info.Text = "请在源图片中进行区域截图操作.";
            打开ToolStripMenuItem.Enabled = false;
        }

        private void 开始识别ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bool_beginCutPic = false;
            开始截图ToolStripMenuItem.Enabled = false;
            开始识别ToolStripMenuItem.Enabled = false;
            bool_beginIdentify = true;
            this.Cursor = Cursors.Cross;
            lab_info.Text = "请在截图窗口中点击文字颜色集中的位置.";
        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            if (bool_beginIdentify == true)
            {
                int x = MousePosition.X - this.Location.X - pictureBox2.Location.X;
                int y = MousePosition.Y - this.Location.Y - pictureBox2.Location.Y;

                
               int num_color = Source.GetPixel(x, y).G;
               

                for (int i = 0; i < NewBT.Width; i  )
                {
                    for (int j = 0; j < NewBT.Height; j  )
                    {

                        if (Source.GetPixel(i, j).G - num_color > -(int)numUpDown_color.Value && Source.GetPixel(i, j).G - num_color < (int)numUpDown_color.Value)
                            {
                                NewBT.SetPixel(i, j, Color.Black);
                            }

                           // NewBT.SetPixel(i, j, Color.White);
                        //else
                         //   NewBT.SetPixel(i, j, Color.Black);
                        
                        else
                          NewBT.SetPixel(i, j, Color.White);
                            
                    }
                }
                pictureBox3.BackgroundImage = NewBT;
                pictureBox3.Refresh();
                保存识别ToolStripMenuItem.Enabled = true;
                lab_info.Text = "现在可对已识别图片进行保存.";
            }
        }
        //
        //黑白变换
        //
        private void 黑贝变换ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            Thread t = new Thread(new ThreadStart(ChangeColor));
            t.Start();
        }

        private void ChangeColor()
        {
            int num_green;
            for (int i = 0; i < OldBT.Width; i  )
            {
                for (int j = 0; j < OldBT.Height; j  )
                {
                    num_green = (OldBT.GetPixel(i, j).B   OldBT.GetPixel(i, j).G   OldBT.GetPixel(i, j).R) / 3;
                    OldBT.SetPixel(i, j, Color.FromArgb(num_green, num_green, num_green));
                }
                pictureBox1.BackgroundImage = OldBT;
                pictureBox1.Refresh();
            }
            黑贝变换ToolStripMenuItem.Enabled = false;
        }
        //
        //保存识别结果
        //
        private void 保存识别ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "jpg file (*.jpg)|*.jpg";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                pictureBox3.BackgroundImage.Save(sfd.FileName);
                lab_info.Text = "图像文字提取系统";
                this.Cursor = Cursors.Default;
                pictureBox2.BackgroundImage = null;
                pictureBox3.BackgroundImage = null;
                pictureBox1.BackgroundImage = null;
                打开ToolStripMenuItem.Enabled = true;
            }
        }
        //
        //放弃所有操作
        //
        private void 放弃ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lab_info.Text = "图像文字提取系统";
            this.Cursor = Cursors.Default;
            pictureBox2.BackgroundImage = null;
            pictureBox3.BackgroundImage = null;
            pictureBox1.BackgroundImage = null;
            打开ToolStripMenuItem.Enabled = true;
        }
        //
        //pictureBox实现滚动
        //
        private void Form1_Resize(Object sender, EventArgs e)
        {
            // If the PictureBox has an image, see if it needs 
            // scrollbars and refresh the image. 
            if (pictureBox1.Image != null)
            {
                this.DisplayScrollBars();
                this.SetScrollBarValues();
                this.Refresh();
            }
        }

        public void DisplayScrollBars()
        {
            // If the image is wider than the PictureBox, show the HScrollBar.
            if (pictureBox1.Width > pictureBox1.BackgroundImage.Width - this.vScrollBar1.Width)
            {
                hScrollBar1.Visible = false;
            }
            else
            {
                hScrollBar1.Visible = true;
            }

            // If the image is taller than the PictureBox, show the VScrollBar.
            if (pictureBox1.Height >
                pictureBox1.BackgroundImage.Height - this.hScrollBar1.Height)
            {
                vScrollBar1.Visible = false;
            }
            else
            {
                vScrollBar1.Visible = true;
            }
        }

        private void HandleScroll(Object sender, ScrollEventArgs se)
        {
            /* Create a graphics object and draw a portion 
               of the image in the PictureBox. */
            Graphics g = pictureBox1.CreateGraphics();

            g.DrawImage(pictureBox1.BackgroundImage,
              new Rectangle(0, 0, pictureBox1.Right - vScrollBar1.Width,
              pictureBox1.Bottom - hScrollBar1.Height),
              new Rectangle(hScrollBar1.Value, vScrollBar1.Value,
              pictureBox1.Right - vScrollBar1.Width,
              pictureBox1.Bottom - hScrollBar1.Height),
              GraphicsUnit.Pixel);

            pictureBox1.Update();
        }

        public void SetScrollBarValues()
        {
            // Set the Maximum, Minimum, LargeChange and SmallChange properties.
            this.vScrollBar1.Minimum = 0;
            this.hScrollBar1.Minimum = 0;

            // If the offset does not make the Maximum less than zero, set its value. 
            if ((this.pictureBox1.BackgroundImage.Size.Width - pictureBox1.ClientSize.Width) > 0)
            {
                this.hScrollBar1.Maximum =
                    this.pictureBox1.BackgroundImage.Size.Width - pictureBox1.ClientSize.Width;
            }
            // If the VScrollBar is visible, adjust the Maximum of the 
            // HSCrollBar to account for the width of the VScrollBar.  
            if (this.vScrollBar1.Visible)
            {
                this.hScrollBar1.Maximum  = this.vScrollBar1.Width;
            }
            this.hScrollBar1.LargeChange = this.hScrollBar1.Maximum / 10;
            this.hScrollBar1.SmallChange = this.hScrollBar1.Maximum / 20;

            // Adjust the Maximum value to make the raw Maximum value 
            // attainable by user interaction.
            this.hScrollBar1.Maximum  = this.hScrollBar1.LargeChange;

            // If the offset does not make the Maximum less than zero, set its value.    
            if ((this.pictureBox1.BackgroundImage.Size.Height - pictureBox1.ClientSize.Height) > 0)
            {
                this.vScrollBar1.Maximum =
                    this.pictureBox1.BackgroundImage.Size.Height - pictureBox1.ClientSize.Height;
            }

            // If the HScrollBar is visible, adjust the Maximum of the 
            // VSCrollBar to account for the width of the HScrollBar.
            if (this.hScrollBar1.Visible)
            {
                this.vScrollBar1.Maximum  = this.hScrollBar1.Height;
            }
            this.vScrollBar1.LargeChange = this.vScrollBar1.Maximum / 10;
            this.vScrollBar1.SmallChange = this.vScrollBar1.Maximum / 20;

            // Adjust the Maximum value to make the raw Maximum value 
            // attainable by user interaction.
            this.vScrollBar1.Maximum  = this.vScrollBar1.LargeChange;
        }
        
    }
}