gpt4 book ai didi

python - 有效地将字符串(或元组)转换为 ctypes 数组

转载 作者:太空狗 更新时间:2023-10-30 00:57:58 26 4
gpt4 key购买 nike

我有获取 PIL 图像并将其转换为 ctypes 数组以传递给 C 函数的代码:

w_px, h_px = img.size
pixels = struct.unpack('%dI'%(w_px*h_px), img.convert('RGBA').tostring())
pixels_array = (ctypes.c_int * len(pixels))(*pixels)

但我正在处理大图像,将那么多项目解包到函数参数中似乎非常慢。要获得合理的加速,我能做的最简单的事情是什么?

我只是将转换为元组作为中间步骤,所以如果没有必要,那就更好了。

最佳答案

可以先构建一个未初始化的数组:

pixarray = (ctypes.c_int * (w_px * h_px))()

然后将图像的内容复制到其中:

# dylib in MacOSX, cdll.wincrt in Win, libc.so.? in Unix, ...
clib = ctypes.CDLL('libc.dylib')

_ = clib.memcpy(pixarray, im.tostring(), w_px * h_px * 4)

memcpy 的返回值是一个你不关心的地址,所以我通过将它分配给名称“单下划线”(按照惯例意味着“我不关心这个”)来“吞下”它;- ).

编辑:正如@Mu Mind 在评论中指出的那样,后一个片段可以有效地简化为使用 ctypes.memmove无需依赖平台来搜索 clib:只需执行即可

_ = ctypes.memmove(pixarray, im.tostring(), w_px * h_px * 4)

关于python - 有效地将字符串(或元组)转换为 ctypes 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2935616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com