【问题标题】:Turning ctypes data into python string as quickly as possible尽快将 ctypes 数据转换为 python 字符串
【发布时间】:2010-10-17 09:28:00
【问题描述】:

我正在尝试在 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。

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

【问题讨论】:

    标签: python pyqt4 ctypes


    【解决方案1】:

    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 调用的需要。

    【讨论】:

    • 非常感谢,string_at 函数成功了。我真的需要更好地阅读文档。我检查了几次,仍然错过了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    相关资源
    最近更新 更多