Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在OS-X上将Cairo Surface转换为Pygame的最快方法_Python_Macos_Pygame_Cairo - Fatal编程技术网

Python 在OS-X上将Cairo Surface转换为Pygame的最快方法

Python 在OS-X上将Cairo Surface转换为Pygame的最快方法,python,macos,pygame,cairo,Python,Macos,Pygame,Cairo,我正在寻找一种用Python绘制平滑动画的方法。我想使用cairo,部分原因是我喜欢亚像素过滤,部分原因是我熟悉API。我的第一种方法是使用GTK.DrawingArea作为cairo曲面的目标。虽然绘图速度很快,但我找不到任何可靠的方法将显示/缓冲与垂直同步联系起来,因此动画不稳定且不可靠 我的下一个方法是尝试PyGame。使用中的示例作为起点,我编写了一些简单的代码来设置各种反弹球的动画。链接页面上的不同方法分为两类: 画到屏幕外的开罗 ImageSurface,然后使用Numpy 将像素缓

我正在寻找一种用Python绘制平滑动画的方法。我想使用cairo,部分原因是我喜欢亚像素过滤,部分原因是我熟悉API。我的第一种方法是使用GTK.DrawingArea作为cairo曲面的目标。虽然绘图速度很快,但我找不到任何可靠的方法将显示/缓冲与垂直同步联系起来,因此动画不稳定且不可靠

我的下一个方法是尝试PyGame。使用中的示例作为起点,我编写了一些简单的代码来设置各种反弹球的动画。链接页面上的不同方法分为两类:

  • 画到屏幕外的开罗 ImageSurface,然后使用Numpy 将像素缓冲区转换为Pygame 表面
  • 两者共享相同的内存 表面
  • 第一种方法的性能很差,因为转换大约需要10毫秒,这是我对60hz帧的大部分时间片。我正在一台2.2Ghz Core2Duo和一台Nvidia 8400的Macbook pro上运行代码。时间非常依赖于曲面的大小,这适用于800x800窗口

    第二种方法是根据像素坐标的顺序来处理曲面。cairo和pygame都坚持只能使用RGB像素排序,不支持转换。问题是,当我设置pygame界面时,它使用BGRA像素排序,这完全让我着迷

    那么现在来回答问题:

  • 是否可以更改像素 上的任一库所使用的格式 mac将与每个 其他的
  • 如果不可能,问题是什么 最快的转换方式 纯Python语言
  • 如果最快的Python方式仍然 把大部分时间都浪费在 框架,那么我如何与 一些C代码来做转换
  • 取决于系统的复杂程度 C的接口是,有多少点 使用pygame而不是 只是用C编写SDL接口
  • .

    这些可能会有所帮助


    另一个线程:

    本教程也可以帮助您:

    他们都有问题2-颜色组件的顺序在两个库中不同,因此需要某种形式的转换。这一页实际上是我几年前开始的:)恐怕不是——这是我一直在寻找的非常具体的东西。