Python 如何使用aggdraw或PySDL2创建圆形渐变? 这是一个普遍的问题

Python 如何使用aggdraw或PySDL2创建圆形渐变? 这是一个普遍的问题,python,sdl-2,pillow,pysdl2,aggdraw,Python,Sdl 2,Pillow,Pysdl2,Aggdraw,我需要创建一个任意半径的圆形渐变,并将其映射到当前鼠标位置。该项目主要使用&,但出于遗留原因,也使用包装PIL。大体上说,SDL2运行与OpenGL的交互&大多数UI内容,但aggdraw确实可以预见到绘图 我已经写了一个非常基本的函数。除了鼠标移动和渐变绘制之间的延迟随着渐变半径的增加而急剧增加之外,它可以正常工作参见我的代码;原因显而易见 下面的代码使用aggdraw;aggdraw对象在别处转换为字节数组,并传递给OpenGL 我对使用SDL2绘图库的解决方案持开放态度,但我从未使用过它,

我需要创建一个任意半径的圆形渐变,并将其映射到当前鼠标位置。该项目主要使用&,但出于遗留原因,也使用包装PIL。大体上说,SDL2运行与OpenGL的交互&大多数UI内容,但aggdraw确实可以预见到绘图

我已经写了一个非常基本的函数。除了鼠标移动和渐变绘制之间的延迟随着渐变半径的增加而急剧增加之外,它可以正常工作参见我的代码;原因显而易见

下面的代码使用aggdraw;aggdraw对象在别处转换为字节数组,并传递给OpenGL

我对使用SDL2绘图库的解决方案持开放态度,但我从未使用过它,我希望能像对待这些解决方案一样对待我

特定上下文的注释

由于我提供的代码非常稀少,出于礼貌,我应该提到,它与我已经编写了约1年的一个大型模块接口。上面提到的模块主要做了很多不恰当的事情,但是下面的函数确实插入了很多内部代码。唉,我还没有为该模块编写文档,因为它目前用于本地上下文


然而,这个函数是我的代码;图书馆的其他部分都经过了很好的测试;开销是您能否确定功能的瓶颈?是不是aggdraw的运行时,通过枕头和numpy的所有映射听起来很重?或者你是在一个更大的半径通过,使循环长期运行?你可能想看看sdl2.sdlgfx模块,它允许你在SDL纹理上画AA圈,这可以通过绕过枕头和numpy转换来加速一切;如果/当我能够利用这个建议时,我将探索并发布。
def mouse_gradient(radius):
        mp = mouse_pos()  # custom function, just wraps fetching mouse coords from sdl2
        mouse_grad = None
        mouse_grad = aggdraw.Draw('RGBA', (radius, radius), (0, 0, 0, 0))
        for n in range(radius):
            n = float(n)
            r = float(radius - n)
            opacity = int(( 0.25 * n / radius) * 100)
            brush = aggdraw.Brush((255, 0, 0), int(opacity))
            tl = (radius - r) // 2  # ie. top-left
            br = (radius - r) // 2 + r  # ie. bottom-right
            mouse_grad.ellipse((tl, tl, br, br), brush)

        return mouse_grad  # where it is subsequently blit to the screen