Ejemplo n.º 1
0
    def save_img(self, data, width, height, output):
        cf_data = Quartz.CFDataCreateMutable(Quartz.kCFAllocatorDefault, 0)
        dest = Quartz.CGImageDestinationCreateWithData(cf_data, kUTTypePNG, 1, None)
        if not dest:
            err = 'MSS: CGImageDestinationCreateWithURL() failed.'
            raise ScreenshotError(err)

        Quartz.CGImageDestinationAddImage(dest, data, None)
        if not Quartz.CGImageDestinationFinalize(dest):
            raise ScreenshotError('MSS: CGImageDestinationFinalize() failed.')

        cf_data_bytes = Quartz.CFDataGetBytes(cf_data, Quartz.CFRangeMake(0, Quartz.CFDataGetLength(cf_data)), None)
        output.write(cf_data_bytes)
Ejemplo n.º 2
0
    def _newPage(self, width, height):
        self.size(width, height)
        mediaBox = Quartz.CGRectMake(0, 0, self.width, self.height)

        if self._hasContext:
            # reset the context
            self.reset()
            # add a new page
            Quartz.CGContextEndPage(self._pdfContext)
            Quartz.CGContextBeginPage(self._pdfContext, mediaBox)
        else:
            # create a new pdf document
            self._pdfData = Quartz.CFDataCreateMutable(None, 0)
            dataConsumer = Quartz.CGDataConsumerCreateWithCFData(self._pdfData)
            self._pdfContext = Quartz.CGPDFContextCreate(dataConsumer, mediaBox, None)
            Quartz.CGContextBeginPage(self._pdfContext, mediaBox)
            self._hasContext = True
Ejemplo n.º 3
0
def cgimageref_to_image(imgref) -> Image:
    buf = Quartz.CFDataCreateMutable(None, 0)

    dest = Quartz.CGImageDestinationCreateWithData(buf, "public.tiff", 1, None)
    Quartz.CGImageDestinationAddImage(dest, imgref, None)
    Quartz.CGImageDestinationFinalize(dest)

    buf_size = Quartz.CFDataGetLength(buf)
    py_buf = io.BytesIO()
    py_buf.write(Quartz.CFDataGetBytePtr(buf).as_buffer(buf_size))
    py_buf.seek(0)

    out = Image.open(py_buf, formats=("TIFF", ))

    if _debug_dump_file:
        out.save("/tmp/game.bmp")
        open("/tmp/native.xbm", "wb").write(py_buf.getbuffer())

    return out