3

我正在尝试在 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。我的复制机制目前每张图像需要将近 300 毫秒,因此速度非常慢。该过程的解码和显示部分只需要大约50ms。

谁能想到我可以采取任何巧妙的捷径来加快这个过程并避免像我目前正在做的那样复制缓冲区两次?

4

1 回答 1

6

ctypes.c_char_Array_829400实例具有.raw返回可能包含 NUL 字节的字符串的属性,.value以及返回字符串到第一个 NUL 字节(如果它包含一个或多个字节)的属性。

但是,您也可以使用 ctypes 访问字符串self.rgb_buffer_ptr,如下所示 ctypes.string_at(self.rgb_buffer_ptr, self.buffer_size):这将避免对 memmove 调用的需要。

于 2009-04-03T16:38:18.413 回答