63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
import logging
|
|
|
|
from PIL import Image
|
|
|
|
from pyscreenshot.plugins.backend import CBackend
|
|
from pyscreenshot.util import platform_is_osx
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
# based on:
|
|
# http://stackoverflow.com/questions/69645/take-a-screenshot-via-a-python-script-linux
|
|
|
|
|
|
class WxBackendError(Exception):
|
|
pass
|
|
|
|
|
|
app = None
|
|
|
|
|
|
class WxScreen(CBackend):
|
|
name = "wx"
|
|
# conflict with pygdk3
|
|
# wx is never installed by default
|
|
# pygdk3 is default on Gnome
|
|
|
|
def grab(self, bbox=None):
|
|
if platform_is_osx():
|
|
raise WxBackendError("osx not supported")
|
|
import wx # type: ignore
|
|
|
|
global app
|
|
if not app:
|
|
app = wx.App()
|
|
screen = wx.ScreenDC()
|
|
size = screen.GetSize()
|
|
if wx.__version__ >= "4":
|
|
bmp = wx.Bitmap(size[0], size[1])
|
|
else:
|
|
bmp = wx.EmptyBitmap(size[0], size[1])
|
|
mem = wx.MemoryDC(bmp)
|
|
mem.Blit(0, 0, size[0], size[1], screen, 0, 0)
|
|
del mem
|
|
if hasattr(bmp, "ConvertToImage"):
|
|
myWxImage = bmp.ConvertToImage()
|
|
else:
|
|
myWxImage = wx.ImageFromBitmap(bmp)
|
|
im = Image.new("RGB", (myWxImage.GetWidth(), myWxImage.GetHeight()))
|
|
if hasattr(Image, "frombytes"):
|
|
# for Pillow
|
|
im.frombytes(bytes(myWxImage.GetData()))
|
|
else:
|
|
# for PIL
|
|
im.fromstring(myWxImage.GetData())
|
|
if bbox:
|
|
im = im.crop(bbox)
|
|
return im
|
|
|
|
def backend_version(self):
|
|
import wx
|
|
|
|
return wx.__version__
|