谈到ctypes的数据转换成Python字符串尽快
题
我想写PyQt4中的视频应用程序,我已经使用Python的ctypes的挂钩到一个古老的传统视频解码器库。图书馆给我的32位ARGB数据,我需要把它转换成一个QImage的。我有它的工作如下:
# Copy the rgb image data from the pointer into the buffer
memmove(self.rgb_buffer, self.rgb_buffer_ptr, self.buffer_size)
# Copy the buffer to a python string
imgdata = ""
for a in self.rgb_buffer:
imgdata = imgdata + a
# Create a QImage from the string data
img = QImage(imgdata, 720, 288, QImage.Format_ARGB32)
的问题是,ctypes的输出数据类型“ctypes.c_char_Array_829440
”和我需要把它变成一个Python串,这样我可以构建一个QImage的。目前我的仿形机构正在采取几乎每300ms的图像,这是痛苦的缓慢。该方法的解码和显示部只占据50ms左右。
任何人都可以想到的任何狡猾的捷径,我可以采取加速这一进程,并避免需要复制缓冲区的两倍,我目前在做什么?
解决方案
在ctypes.c_char_Array_829400
实例具有属性.raw
返回可能含有NUL字节的串,并且其返回字符串到第一NUL字节的属性.value
如果它包含一个或多个。
不过,您也可以使用ctypes的访问字符串以self.rgb_buffer_ptr
,就像这样:
ctypes.string_at(self.rgb_buffer_ptr, self.buffer_size)
;这将避免对的memmove呼叫的需要。
不隶属于 StackOverflow