图像算法失误出现的【流星】效果

本来需求需要处理一个类似泛光的效果,对于亮色区域进行膨胀,但是处理失误,导致出现了上面这样的持续偏离,并且边缘拖尾的效果。但是感觉这个效果还挺漂亮的,所以把它记录下来。实现的代码如下:

private void button13_Click_do()
{
    try
    {
        if (rec_1_going) return;
        rec_1_going = true;
        var img = pictureBox1.Image.Clone() as Bitmap;
        var circlelen = 1;
        var ps_incircle = new Point().RoundPsN(circlelen);
        var circlelenMax = circlelen + 1;
        var margin = 1;
        var img_mask = new Bitmap(img.Width, img.Height);
        var lb_mask = new LockBitmap(img_mask);
        lb_mask.LockBits();
        var lb = new LockBitmap(img);
        lb.LockBits();
        Color[,] rst = new Color[lb.Width, lb.Height];
        bool[,] doneset = new bool[lb.Width, lb.Height];
        for (int r = margin; r < img.Height - margin; r++)
        {
            for (int c = margin; c < img.Width - margin; c++)
            {
                if (doneset[c, r]) continue;
                var cr_curr = lb.GetPixel(c, r);
                var ls = ps_incircle.Select(a => new Point(a.X + c, a.Y + r)).ToList();
                foreach (var p in ls)
                {
                    var dist = ImgHelper.PointDist(p, new Point(c, r));
                    var dist_pct = dist / (double)circlelenMax;
                    var a = 255 - (int)Math.Max(0, Math.Min(255, 255 * dist_pct));
                    lb_mask.SetPixel(p.X, p.Y, Color.FromArgb(a, cr_curr));
                }
            }
        }
        lb.UnlockBits();
        lb_mask.UnlockBits();
        var imgnew = new Bitmap(img.Width, img.Height);
        var g_new = System.Drawing.Graphics.FromImage(imgnew);
        g_new.DrawImage(img, new Point());
        g_new.DrawImage(img_mask, new Point());
        g_new.Dispose();
        img_mask.Dispose();
        img.Dispose();
        pictureBox1.Image = imgnew; pictureBox2.Image = imgnew;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        rec_1_going = false;
    }
}

很多意外的美好,可能都是在错误的意外中遇见的吧。
希望你的每一次失误,都遇见美好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值