51 lines
1.0 KiB
Python
51 lines
1.0 KiB
Python
# import atexit
|
|
|
|
from PIL import Image
|
|
|
|
from pyscreenshot.plugins.backend import CBackend
|
|
from pyscreenshot.util import py_minor
|
|
|
|
# https://python-mss.readthedocs.io/examples.html
|
|
|
|
|
|
class MssError(Exception):
|
|
pass
|
|
|
|
|
|
sct = None
|
|
|
|
# not working without xrandr extension
|
|
# only bits_per_pixel == 32 is supported
|
|
|
|
|
|
class MssWrapper(CBackend):
|
|
name = "mss"
|
|
|
|
def grab(self, bbox=None):
|
|
if py_minor() < 5:
|
|
raise MssError()
|
|
import mss # type: ignore
|
|
|
|
# atexit.register(sct.close())
|
|
|
|
global sct
|
|
if not sct:
|
|
sct = mss.mss()
|
|
|
|
# with self.mss.mss() as sct:
|
|
if bbox:
|
|
monitor = bbox
|
|
else:
|
|
monitor = sct.monitors[0]
|
|
sct_img = sct.grab(monitor)
|
|
|
|
im = Image.frombytes("RGB", sct_img.size, sct_img.bgra, "raw", "BGRX")
|
|
# The same, but less efficient:
|
|
# im = Image.frombytes('RGB', sct_img.size, sct_img.rgb)
|
|
return im
|
|
|
|
def backend_version(self):
|
|
import mss
|
|
|
|
return mss.__version__
|