39 lines
1.5 KiB
Plaintext
39 lines
1.5 KiB
Plaintext
|
|
||
|
init -10 python:
|
||
|
class ScreenshotImage(im.ImageBase):
|
||
|
def __init__(self, root, **properties):
|
||
|
super(ScreenshotImage, self).__init__(root, **properties)
|
||
|
self.root = root
|
||
|
# self.cache = False
|
||
|
# Sometimes causes segfault, maybe only if cache = True?
|
||
|
|
||
|
def load(self):
|
||
|
sw, sh = config.screen_width, config.screen_height
|
||
|
render = renpy.display.render.render_screen(self.root, sw, sh)
|
||
|
return renpy.display.draw.screenshot(render)
|
||
|
|
||
|
@staticmethod
|
||
|
def capture(retain=True):
|
||
|
if retain:
|
||
|
# Prevent the image from being recaptured after load
|
||
|
renpy.retain_after_load()
|
||
|
|
||
|
root = renpy.display.core.scene_lists().make_layer("screens", {})
|
||
|
return ScreenshotImage(root)
|
||
|
|
||
|
def displayable_to_file(d, path, size=(config.screen_width, config.screen_height), crop=None, coloralpha=(0, 255, 0)):
|
||
|
crop = crop or (0, 0, size[0], size[1])
|
||
|
gl_clear = renpy.config.gl_clear_color
|
||
|
renpy.config.gl_clear_color = coloralpha
|
||
|
|
||
|
d = d.render(size[0], size[1], 0, 0)
|
||
|
surf = renpy.display.draw.screenshot(d)
|
||
|
surf = pygame.transform.smoothscale(surf, (config.screen_width, config.screen_height)).convert()
|
||
|
surf.set_colorkey(coloralpha)
|
||
|
|
||
|
psurf = pygame.Surface(size, pygame.SRCALPHA).convert_alpha()
|
||
|
psurf.blit(surf, (0, 0), crop)
|
||
|
|
||
|
pygame.image.save(psurf, path, 9)
|
||
|
renpy.config.gl_clear_color = gl_clear
|