mirror of
https://github.com/quantum5/punyverse.git
synced 2025-04-24 13:11:57 -04:00
40 lines
1.4 KiB
Cython
40 lines
1.4 KiB
Cython
from libc.string cimport memcpy
|
|
|
|
include "_cyopengl.pxi"
|
|
cdef float PI = 3.1415926535897932324626
|
|
cdef float TWOPI = PI * 2
|
|
|
|
cdef extern from "Python.h":
|
|
object PyBytes_FromStringAndSize(const char *s, Py_ssize_t len)
|
|
const char* PyBytes_AsString(bytes o)
|
|
|
|
|
|
cpdef bytes bgr_to_rgb(bytes buffer, int width, int height, bint alpha=0):
|
|
cdef int length = len(buffer)
|
|
cdef int depth = length / (width * height)
|
|
cdef int depth2 = depth - alpha
|
|
cdef object final = PyBytes_FromStringAndSize(NULL, length)
|
|
cdef char *result = PyBytes_AsString(final)
|
|
cdef const char *source = PyBytes_AsString(buffer)
|
|
cdef int x, y, offset, i, row = width * depth
|
|
for y in xrange(height):
|
|
for x in xrange(width):
|
|
offset = y * row + x * depth
|
|
for i in xrange(depth2):
|
|
result[offset+i] = source[offset+depth2-i-1]
|
|
if alpha:
|
|
result[offset+depth2] = source[offset+depth2]
|
|
return final
|
|
|
|
|
|
cpdef bytes flip_vertical(bytes buffer, int width, int height):
|
|
cdef int length = len(buffer)
|
|
cdef object final = PyBytes_FromStringAndSize(NULL, length)
|
|
cdef char *result = PyBytes_AsString(final)
|
|
cdef const char *source = PyBytes_AsString(buffer)
|
|
cdef int y1, y2, row = length / height
|
|
for y1 in xrange(height):
|
|
y2 = height - y1 - 1
|
|
memcpy(result + y1 * row, source + y2 * row, row)
|
|
return final
|