C#图像处理

本文介绍了使用C#进行图像处理的实践,包括前后版本对比,展示了均衡化、暗角、马赛克、去色、底片、扩散、降低亮度和镜像等效果的实现方法。此外,还涵盖了图片浏览、清理和渐入渐出动画等功能的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

在之前的博客中讲到了用C#实现直方图均衡化的具体过程,
直方图均衡化
由于学校课程要求,在之前的基础上我对之前的程序进行了版本的更新,
得到一个更加完整,美观的版本!

前后对比:

V1.0界面:
这里写图片描述
实现功能:直方图均衡化
V2.0界面:
这里写图片描述
实现功能:

  • 均衡化,暗角,马赛克,去色,底片,扩散,降低亮度,镜像;
  • 图片浏览;
  • 图片清除;
  • 动画启动。

代码文件结构:

这里写图片描述
1.关于程序的代码,views里存放的是两个窗体:

  • Start_Form为程序开始的启动界面;
  • Showpicture为浏览界面。

2.在Contorl文件夹里的Operation.cs,封装的是程序的主要功能的代码;

3.Form1为项目的主界面;

主要功能的实现:

整体来说:

将业务逻辑层的代码放在Contorl文件夹里的Operation.cs
这里写图片描述
然后在主界面Form1,的RadioButton的Checked事件进行调用,

            if(radioButton1.Checked == true)
            {
                newbitmap = Operation.Equalization(bitmap);
                if(newbitmap != null)pictureBox2.Image = newbitmap.Clone() as Image;
                //显示至pictureBox2
                else { MessageBox.Show("原始图片为空!", "提示:"); }
            }

以上代码为调用OperationEqualization方法,再将处理后图片显示在pictureBox2上。

均衡化

这个就不多说。直方图均衡化

暗角

暗角就是在图像的四角添加逐渐变黑的一个圈。
步骤:
计算顶点与中心的距离maxDistance
计算每个像素点与中心的距离distance
计算factor = distance / maxDistance
将当前像素点的颜色设置为 原颜色 * (1-factor)

        /// <summary>
        /// 暗角处理
        /// </summary>
        public static Bitmap Darkangle(Bitmap bitmap)
        {
            if (bitmap != null)
            {
                newbitmap = bitmap.Clone() as Bitmap;
                int width = newbitmap.Width;
                int height = newbitmap.Height;
                float cx = width / 2;
                float cy = height / 2;
                float maxDist = cx * cx + cy * cy;
                float currDist = 0, factor;
                Color pixel;

                for (int i = 0; i < width; i++)
                {
                    for (int j = 0; j < height; j++)
                    {
                        currDist = ((float)i - cx) * ((float)i - cx) + ((float)j - cy) * ((float)j - cy);
                        factor = currDist / maxDist;

                        pixel = newbitmap.GetPixel(i, j);
                        int red = (int)(pixel.R * (1 - factor));
                        int green = (int)(pixel.G * (1 - factor));
                        int blue = (int)(pixel.B * (1 - factor));
                        newbitmap.SetPixel(i, j, Color.FromArgb(red, green, blue));
                    }
                }
            }
            return newbitmap;
        }

效果:
这里写图片描述

马赛克

步骤:
马赛克的基本思想就是把一个像素点周围的点的像素取个平均,
然后把这些像素点的颜色设为这个平均值。
周围的像素点取的越多,马克赛的效果也就越明显。

        /// <summary>
        /// 马赛克处理
        /// </summary>
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值