编程学C#(2):BMP图像处理

编程学C#(2):BMP图像处理

(2014-5-12)编制的BMP图像处理程序,学习VS2010 C# 设计方法。

一、          主要内容:

1.       文件的打开、保存;

2.       图像的拷贝、粘贴、剪切粘贴、放大、缩小;

3.       axPictureClip 控件的使用;

4.       图像的灰度化、灰度反转、二值化函数设计。

     程序运行示例如下:


 

二、          程序实现:

1.       文件的打开、保存

private void 打开ToolStripMenuItem_Click(objectsender, EventArgs e)

        {

           OpenFileDialog ofdlg = new OpenFileDialog();

           ofdlg.Filter = "BMP File(*.bmp)|*.bmp";

            if(ofdlg.ShowDialog() == DialogResult.OK)

            {

                Bitmap image = newBitmap(ofdlg.FileName);

               pictureBox1.Image = image;

            }  

 

        }

 

private void 保存ToolStripMenuItem_Click(objectsender, EventArgs e)

        {

            stringstr;

            Bitmapbox1 = new Bitmap(pictureBox1.Image);

           SaveFileDialog sfdlg = new SaveFileDialog();

           sfdlg.Filter = "bmp 文件(*.bmp)|*.bmp|ALLFile(*.*)|*.*";

           sfdlg.ShowDialog();

            str =sfdlg.FileName;

            if (str!= "")

              box1.Save(str);  

        }

 

 

2.       图像的拷贝、粘贴、剪切粘贴、放大

private void 拷贝ToolStripMenuItem_Click(objectsender, EventArgs e)

        {

           Clipboard.SetDataObject(pictureBox1.Image);

        }

 

private void 粘贴ToolStripMenuItem_Click(objectsender, EventArgs e)

   {

     IDataObjectiData = Clipboard.GetDataObject();

     if(iData.GetDataPresent(DataFormats.Bitmap))

         pictureBox2.Image = (Bitmap)iData.GetData(DataFormats.Bitmap);

        }

 

private void 剪切粘贴ToolStripMenuItem_Click(object sender, EventArgs e)

        {

           axPictureClip1.Picture = pictureBox1.Image;

           axPictureClip1.ClipX = 10;

           axPictureClip1.ClipY = 10;

           axPictureClip1.ClipHeight = 30;

           axPictureClip1.ClipWidth = 60;

           pictureBox2.Image = axPictureClip1.Clip;

        }

 

private void 放大ToolStripMenuItem_Click(objectsender, EventArgs e)

        {

            Bitmapbitmap = new Bitmap(this.pictureBox1.Image);

            BitmapMyBitmap = new Bitmap(this.pictureBox1.Image);

           Graphics g = pictureBox2.CreateGraphics();

           g.Clear(this.pictureBox2.BackColor);

           g.DrawImage(bitmap, this.pictureBox2.ClientRectangle, 0, 0,MyBitmap.Width / 2, MyBitmap.Height / 2, GraphicsUnit.Pixel);

}

 

3.       axPictureClip 控件的使用

1)添加ActiveX控件到工具箱。


 

 

4.       图像的灰度化、灰度反转、二值化函数设计。

        /// 图像灰度化

        publicstatic Bitmap ToGray(Bitmap bmp)

        {

         for (int i= 0; i < bmp.Width; i++)

          {

           for (intj = 0; j < bmp.Height; j++)

           {

             //获取该点的像素的RGB的颜色

              Colorcolor = bmp.GetPixel(i, j);

              //利用公式计算灰度值

            intgray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);

             ColornewColor = Color.FromArgb(gray, gray, gray);

             bmp.SetPixel(i, j, newColor);

              }

            }

            returnbmp;

        }

 

        /// 图像灰度反转

        publicstatic Bitmap GrayReverse(Bitmap bmp)

        {

            for(int i = 0; i < bmp.Width; i++)

            {

                for (int j = 0; j < bmp.Height; j++)

                {

                   //获取该点的像素的RGB的颜色

                   Color color = bmp.GetPixel(i, j);

Color newColor = Color.FromArgb(255 - color.R, 255 -color.G, 255 - color.B);

                   bmp.SetPixel(i, j, newColor);

                }

            }

            returnbmp;

        }

 

        /// 图像二值化1:取图片的平均灰度作为阈值,低于该值的全都为0,高于该值的全都为255

        publicstatic Bitmap ConvertTo1Bpp1(Bitmap bmp)

        {

            int average= 0;

            for(int i = 0; i < bmp.Width; i++)

            {

                for(int j = 0; j < bmp.Height; j++)

                {

                   Color color = bmp.GetPixel(i, j);

                   average += color.B;

                }

            }

            average= (int)average / (bmp.Width * bmp.Height);

            for(int i = 0; i < bmp.Width; i++)

            {

                for(int j = 0; j < bmp.Height; j++)

                {

                   //获取该点的像素的RGB的颜色

                   Color color = bmp.GetPixel(i, j);

                   int value = 255 - color.B;

ColornewColor = value > average ? Color.FromArgb(0, 0, 0) :Color.FromArgb(255,255, 255);

                   bmp.SetPixel(i, j, newColor);

                }

            }

            returnbmp;

        }

 

三、          程序下载:

 

猜你喜欢

转载自blog.csdn.net/dalong10/article/details/25690497