调整晕影效果的传播

时间:2016-01-06 06:51:37

标签: c# image-processing imageprocessor

我正在使用以下代码为图像生成晕影效果。正如你在下面看到的,它运作良好。我希望能够调整晕影的内部扩散(即使中间更亮并缩短渐变)但是数学对我来说更好。有谁能请给我一些解释的指示?

    protected override void Apply(ImageBase target, 
        ImageBase source, 
        Rectangle targetRectangle, 
        Rectangle sourceRectangle, 
        int startY, int endY)
    {
        int startX = sourceRectangle.X;
        int endX = sourceRectangle.Right;
        Color color = this.Color;
        Vector2 centre = Rectangle.Center(targetRectangle);
        float rX = this.RadiusX > 0 ? this.RadiusX : targetRectangle.Width / 2f;
        float rY = this.RadiusY > 0 ? this.RadiusY : targetRectangle.Height / 2f;
        float maxDistance = (float)Math.Sqrt(rX * rX + rY * rY);

        Parallel.For(
            startY,
            endY,
            y =>
                {
                    for (int x = startX; x < endX; x++)
                    {
                        float distance = Vector2.Distance(centre, new Vector2(x, y));
                        Color sourceColor = target[x, y];
                        target[x, y] = Color.Lerp(sourceColor, 
                            color, .9f * distance / maxDistance);
                    }
                });
    }

原始图片 Original image

暗影效果 enter image description here

0 个答案:

没有答案