我正在尝试在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.
任何人都可以想到我可以采取的任何狡猾的快捷方式来加快这个过程,并避免需要复制缓冲区两次,因为我目前正在做?
该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调用.