[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/lineCode/cefpython/cefpython56/src/paint_buffer.pyx [Back]  [Original]

# Copyright (c) 2013 CEF Python, see the Authors file.
# All rights reserved. Licensed under BSD 3-clause license.
# Project website: https://github.com/cztomczak/cefpython

include "cefpython.pyx"

cdef PaintBuffer CreatePaintBuffer(const void* buffer_, int width, int height):
    cdef PaintBuffer paintBuffer = PaintBuffer()
    paintBuffer.buffer = buffer_
    paintBuffer.width = width
    paintBuffer.height = height
    paintBuffer.length = width*height*4
    return paintBuffer

cdef class PaintBuffer:
    cdef const void* buffer
    cdef int width
    cdef int height
    cdef Py_ssize_t length

    cpdef uintptr_t GetIntPointer(self) except *:
        return self.buffer

    cpdef object GetString(self, str mode="bgra", str origin="top-left"):
        cdef void* dest
        cdef py_bool dest_alloced = False
        cdef object ret

        origin = origin.lower()
        mode = mode.lower()
        assert origin in ("top-left", "bottom-left"), "Invalid origin"
        assert mode in ("bgra", "rgba"), "Invalid mode"

        # To get rid of a Cython warning:
        # | '__pyx_v_dest' may be used uninitialized in this function
        dest = malloc(0)

        if mode == "rgba":
            if not dest_alloced:
                dest = malloc(self.length)
                dest_alloced = True
            SwapBufferFromBgraToRgba(dest, self.buffer, self.width,
                    self.height)

        if origin == "bottom-left":
            if not dest_alloced:
                dest = malloc(self.length)
                dest_alloced = True
            FlipBufferUpsideDown(dest, self.buffer, self.width, self.height)

        if dest_alloced:
            ret = (dest)[:self.length]
            free(dest)
            return ret
        else:
            return (self.buffer)[:self.length]

Web Proxy Viewer  |  New URL  |  Original Page