forked from cztomczak/cefpython
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpaint_buffer.pyx
More file actions
56 lines (46 loc) · 1.79 KB
/
paint_buffer.pyx
File metadata and controls
56 lines (46 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# Copyright (c) 2012-2014 The CEF Python authors. All rights reserved.
# License: New BSD License.
# Website: http://code.google.com/p/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 long long GetIntPointer(self) except *:
return <long long>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 = <void*>malloc(0)
if mode == "rgba":
if not dest_alloced:
dest = <void*>malloc(self.length)
dest_alloced = True
SwapBufferFromBgraToRgba(dest, self.buffer, self.width,
self.height)
if origin == "bottom-left":
if not dest_alloced:
dest = <void*>malloc(self.length)
dest_alloced = True
FlipBufferUpsideDown(dest, self.buffer, self.width, self.height)
if dest_alloced:
ret = (<char*>dest)[:self.length]
free(dest)
return ret
else:
return (<char*>self.buffer)[:self.length]