I'm using the C-based screenshot concept from JHolta's answer in Take a screenshot via a python script. [Linux] in order to generate screenshots I'd like to display in PyGame. With some minor tweaks (prepending extern "C"
to the functions and importing Xutil instead of Xlib) the provided code works amazingly well. In short, it uses Image.frombuffer
on a byte array returned by the C library. With show()
, the image and anything about it I manipulate is displayed by ImageMagick.
However, if I convert it to Python 3's PyGame as per PIL and pygame.image, I only get a black surface. It's not a straightforward issue, though: If I draw onto the image before converting it into a PyGame image (like in the OP of the latter link), that does show on a black background when blitting the result. Furthermore, print
ing the byte objects from PILImage.tobytes
and pygame.image.tostring
shows they both contain data and their len
is identical.
What am I doing wrong here? I'll gladly provide code if necessary, but I think it's more of a conceptual issue and I didn't really change the snippets from these answers a lot.
(Similar issue in Python 2, by the way, but there PyGame uses str
instead of byte
for tostring
/ fromstring
and printing the tostring
appears to yield an empty string.)