我正在使用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图像之前绘制到图像上(就像在后一个链接的OP中那样),那么在blitting结果时它会显示在黑色背景上。此外,print
来自PILImage.tobytes
和pygame.image.tostring
的字节对象显示它们都包含数据且len
相同。
我在这里做错了什么?如果有必要的话,我很乐意提供代码,但我认为这更像是一个概念问题而且我并没有真正改变这些答案中的代码片段。
(顺便说一句,Python 2中的类似问题,但PyGame使用str
代替byte
tostring
/ fromstring
并打印tostring
似乎产生一个空字符串。)
答案 0 :(得分:1)
事实证明,当显示它的全屏窗口打开时,一个错误的触发器导致再次拍摄屏幕截图。我想当时有几毫秒的黑度或未定义的状态(在截图函数的上下文中),并且库足够快以捕获它。
我不确定这是否应该保持原状,因为它基本上是一个提醒,以检查人类无法察觉的事情。如果不合适,请随意删除。