2

我正在使用以下代码在图像上产生晕影效果。正如您在下面看到的,它工作得很好。我希望能够调整小插图的内部传播(即使中间更亮并缩短渐变)但是数学让我变得更好。任何人都可以给我一些解释的指示吗?

    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);
                    }
                });
    }

原始图像 原始图像

晕影效果 在此处输入图像描述

4

0 回答 0