C函數(以下代碼中的image_data
變量)返回指向類型爲POINTER(c_ubyte)
的緩衝區的指針。我希望這些數據由Python管理,因此我想將它複製到bytearray
。這裏的函數調用Python`ctypes` - 如何將C函數返回的緩衝區複製到字節數組中
image_data = stb_image.stbi_load(filename_cstr, byref(width),
byref(height), byref(num_channels),
c_int(expected_num_channels))
我們得到了只有電話後知道圖像的width
和height
,所以不能預先分配bytearray
。
我會用
array_type = c.c_ubyte * (num_channels.value * width.value * height.value)
image_data_bytearray = bytearray(cast(image_data, array_type))
但類型cast
到必須是一個指針,而不是數組,所以我得到一個錯誤。
TypeError: cast() argument 2 must be a pointer type, not c_ubyte_Array_262144
我該怎麼辦?
你會發現這個有用:https://stackoverflow.com/questions/4355524/getting-data-from-ctypes-array-into-numpy - NumPy的是一個很好的圖書館數據處理的類型。 –
您可以有一個指向數組的指針,例如'ptype = POINTER(c_ubyte *(num_channels.value * width.value * height.value))'。通過使用'from_buffer'複製源指針的地址來獲取實例,然後解引用以獲取可傳遞給'bytearray'的數組,例如'image_data_bytearray = bytearray(ptype.from_buffer(image_data)[0])''。 – eryksun