如何在Python中创建一个无符号字符数组?(对于使用PyOpenGL的glReadPixels)

问题描述 投票:0回答:1

我在GLES2和EGL中使用PyOpenGL写了一些代码,我需要使用glReadPixels函数,除了最后一个参数必须是一个ctypes unsigned char buffer,我不知道如何创建。

这里是C代码。

unsigned char* buffer = malloc(width * height * 4);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

相当于Python的代码是什么?

我使用的是GLES2而不是GL,因此。buffer = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE) 不工作。

当我尝试 buffer = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE) 我得到以下错误。

   buffer = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE)
  File "/home/fa/berryconda3/lib/python3.6/site-packages/OpenGL/platform/baseplatform.py", line 415, in __call__
    return self( *args, **named )
TypeError: this function takes at least 7 arguments (6 given)
python opengl-es ctypes pyopengl
1个回答
2
投票

创建一个适当大小的字节缓冲区。

buffer_size = width * height * 4
buffer = (GLbyte * buffer_size)()

把缓冲区传给glReadPixels。

glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer)

这和使用 ctypes.c_byte:

import ctypes
buffer_size = width * height * 4
buffer = (ctypes.c_byte * buffer_size)()

或者创建一个适当大小的numpy缓冲区。

import numpy
buffer = numpy.empty(width * height * 4, "uint8")

把缓冲区的大小 glReadPixels:

glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer)
© www.soinside.com 2019 - 2024. All rights reserved.