你所在位置:首页C#.net开发 → c#给jpg图片添加光照效果代码 椭圆形光照效果函数

c#给jpg图片添加光照效果代码 椭圆形光照效果函数

发布时间:2019-01-11
程序代码 处理JPG图片的时候 我们需要在图片上添加光照效果  或者需要在图片上 的某个区域进行处理

我们需要先计算出图片的像素 长宽多少   假设我们需要在一张图片的 左上角开始 左上角坐标为0,0   长为100 宽为200像素的椭圆形光照效果,即可使用这些数字代入如下的函数当中

SetGz(ImagePath, 0, 0, 100, 200); 即可对图片进行处理光照效果  修改代码可以设置光照度


/// <summary>
/// jpg图片添加光照效果代码  椭圆形光照效果
/// </summary>
/// <param name="ImagePath">图片的绝对路径</param>
/// <param name="x1">图片上需要处理的开始点坐标X  左上角向右开始多少个像素</param>
/// <param name="y1">图片上需要处理的开始点坐标y  左上角向下开始多少个像素</param>
/// <param name="w"> 光照的长度 </param>
/// <param name="h">光照的高度</param>
/// <returns></returns>
        public string SetGz(string ImagePath, int x1, int y1, int w, int h)
        {
            try
            {
                Image pic = Image.FromFile(ImagePath);
                Bitmap MyBitmap = (Bitmap)pic.Clone();
                int Height = pic.Height;
                int Width = pic.Width;

                int cw = x1 + w / 2;
                int ch = y1 + h / 2;
                int dw = w / 2;
                int dh = h / 2;

                //MyCenter图片中心点,发亮此值会让强光中心发生偏移
                Point MyCenter = new Point(cw, ch);
                //R强光照射面的半径,即”光晕”
                int R = Math.Min(w / 2, h / 2);
                for (int i = Width - 1; i >= 1; i--)
                {
                    for (int j = Height - 1; j >= 1; j--)
                    {
                        double ty = Math.Pow((i - MyCenter.X), 2) / (dw * dw) + Math.Pow((j - MyCenter.Y), 2) / (dh * dh);
                       // float MyLength = (float)Math.Sqrt(Math.Pow((i - MyCenter.X), 2) + Math.Pow((j - MyCenter.Y), 2));   //此为圆形代码  
                        if (ty <= 1)
                        {
                            Color MyColor = MyBitmap.GetPixel(i, j);
                            int r, g, b;
                            //220亮度增加常量,该值越大,光亮度越强
                            float MyPixel = 200.0f * (1.0f - float.Parse((ty).ToString()));
                            r = MyColor.R + (int)MyPixel;
                            r = Math.Max(0, Math.Min(r, 255));
                            g = MyColor.G + (int)MyPixel;
                            g = Math.Max(0, Math.Min(g, 255));
                            b = MyColor.B + (int)MyPixel;
                            b = Math.Max(0, Math.Min(b, 255));
                            //将增亮后的像素值回写到位图
                            Color MyNewColor = Color.FromArgb(255, r, g, b);
                            MyBitmap.SetPixel(i, j, MyNewColor);

                        }
                    }
                    //graphics.DrawImage(MyImage, new Rectangle(0, 0, Width, Height));
                }
                pic.Dispose();
                MyBitmap.Save(ImagePath.Replace(".jpg", "_1.jpg"), ImageFormat.Jpeg);
                MyBitmap.Dispose();


                return "操作成功!";
            }
            catch (Exception ex)
            {
                return ex.Message;
            }

        }

上一篇:C# WindowsMediaPlayer 的一些用法实例
下一篇:c#语言重点知识详解(四:加框与解框)