winform基础操作C#获取并处理图片像素

介绍基于.NET程序库中System.Drawing中的Bitmap,进行图像的像素级处理。

简述基于Windows Form桌面应用程序框架,小程序的输入输出实现。(使用pictureBox控件)

  • Visual Studio 2015 (08/10/12/13/17均可用)

  • 默认基于.NET 2.0(高版本也可用)

  • 任意图片文件

方法步骤

一,注意:有WinForm基础的,可以直接到第5步或第7步。

首先,打开Visual Studio,创建C#语言下的Windows窗体应用程序

(即使用经典的WinForm框架)

二, 左边工具箱(若没有需调出)拖动label标签,pictureBox图片框,button按钮这些控件到设计窗口。

三,在右侧属性窗体中修改这些控件的名称Name(控件对象编程时的名称),Text属性(显示内容)。

pictureBox还可修改下BorderStyle使得边框可见

四,双击“读取文件”按钮(buttonRead),在代码中自动添加了buttonRead_Click事件处理函数。

在其中编写代码如图:

1.打开文件名获取窗口,提示用户选择一个文件;

2.然后获取文件名;

3.读取图片,设置到图片框。

            OpenFileDialog dlg = new OpenFileDialog();
            if (dlg.ShowDialog()==DialogResult.OK)
            {
                var filename = dlg.FileName;
                pictureBoxSrc.Image = Image.FromFile(filename);
            }

红色框为读取文件按钮的条件代码 

五,接下来双击“显示变换结果”(buttonResult)按钮,同样在对应事件函数中,编写代码:

1.把图片复制到新的Bitmap对象

2.空出Bitmap对象处理代码

3.把处理后的Bitmap对象设置到结果图片框

六,现在运行程序,点击左侧按钮选择文件,点击右侧显示结果,如图说明程序框架OK。

接下来可以解决Bitmap的处理代码了。

不要在意背景颜色和右上角的坐标,这些可以在代码中添加窗口程序

七,Bitmap处理代码部分编写:

在二重for循环中,

1.使用getPixel(x坐标,y坐标)获取到每个像素的Color,保存到变量col。

2.<根据col计算变换后颜色colSet>

3.使用setPixel(x坐标,y坐标,Color对象)设置回Bitmap.

注意:第2部分颜色变换代码是可根据需要修改

 

        private void buttonBoxAns_Click(object sender, EventArgs e)
        {
            Bitmap bmap = new Bitmap(pictureBoxSrc.Image);
            for (int i = 0; i < bmap.Height; ++i)
            {
                for (int j = 0; j < bmap.Width; ++j)
                {
                    Color col = bmap.GetPixel(j,i); //从像素度颜色到变量col
                    byte gray =                   //颜色变换
                        (byte)(0.3f * col.R + 0.59f * col.G + 0.11f * col.B);
                    Color colSet = Color.FromArgb(gray, gray, gray);
                    bmap.SetPixel(j, i, colSet);  //设置颜色colSet到像素
                }
            }
            pictureBoxAns.Image = bmap;
        }

八,根据上面颜色变换代码(灰度计算以及灰度颜色设置),得到的执行结果如图。

九,同理,下图的颜色变换代码(灰度计算然后if-else分段设置颜色),执行结果如图。

                for (int j = 0; j < bmap.Width; ++j)
                {
                    Color col = bmap.GetPixel(j,i); //从像素度颜色到变量col
                    byte gray =                   //颜色变换
                        (byte)(0.3f * col.R + 0.59f * col.G + 0.11f * col.B);
                    Color colSet = Color.FromArgb(gray, gray, gray);
                    if (gray < 50) colSet = Color.Blue;  //此为换一段变换代码,将颜色分段展示
                    else if (gray < 100) colSet = Color.Green;
                    else if (gray < 150) colSet = Color.Red;
                    else colSet = Color.White;
                    bmap.SetPixel(j, i, colSet);  //设置颜色colSet到像素
                }

 

十,下面的颜色变换代码(计算反色),执行结果如图。可见颜色变换代码是非常灵活的,我们可以修改这一部分/增加多种选择,来实现丰富的图像处理效果。

 

                        Color colSet = Color.FromArgb(
                        col.A,
                        255 - col.R, //计算反色(不透明度保留)
                        255 - col.G,
                        255 - col.B);

注意

  • 本程序输入输出,使用了.NET库中的WinForm框架中的控件,比如pictuteBox,这些控件在其它框架下不可用。

  • 本程序图像处理,使用了.NET库中的Bitmap类型,该类型属于System.Drawing,在其它框架下用法相同。

  • 如果到最后输出的图片只有一部分,或者是不能显示完整图片 只需要把其中一个窗口控件的模式改为zoom就好了

猜你喜欢

转载自blog.csdn.net/qq_65356682/article/details/129872163