PIL -> PyGame 图像转换:部分数据丢失

PIL -> PyGame image conversion: Partial data loss

我正在使用 JHolta 在 Take a screenshot via a python script. [Linux] 中的回答中基于 C 的屏幕截图概念来生成我想在 PyGame 中显示的屏幕截图。通过一些小的调整(在函数前面添加 extern "C" 并导入 Xutil 而不是 Xlib),所提供的代码运行得非常好。简而言之,它对 C 库返回的字节数组使用 Image.frombuffer。使用 show(),图像和我操作的任何相关内容都由 ImageMagick 显示。

但是,如果我按照 PIL and pygame.image 将其转换为 Python 3 的 PyGame,我只会得到一个黑色表面。不过,这不是一个简单的问题:如果我在将图像转换为 PyGame 图像之前在图像上绘制(就像在后者 link 的 OP 中一样),那么在 blitting 时确实会在黑色背景上显示结果。此外,printing 来自 PILImage.tobytespygame.image.tostring 的字节对象显示它们都包含数据并且它们的 len 是相同的。

我在这里做错了什么?如有必要,我很乐意提供代码,但我认为这更像是一个概念性问题,我并没有对这些答案中的片段进行太多更改。

(Python 2 中的类似问题,顺便说一下,但是 PyGame 使用 str 而不是 byte 用于 tostring / fromstring 并打印 tostring 似乎产生一个空字符串。)

事实证明,一个有问题的触发器导致在全屏 window 显示它打开时再次截屏。我想那一刻有几毫秒的黑暗或未定义的状态(在屏幕截图功能的上下文中),并且库足够快地捕捉到它。

我不确定这是否应该保持下去,因为它基本上是提醒检查人类无法感知的事物。不妥之处欢迎删除。