ctypes and pointer manipulation
I am dealing with image buffers, and I want to be able to access data a few lines into my image for analysis with a c library. I have created my 8-bit pixel buffer in Python using create_string_buffer. Is there a way to get a pointer to a location within that buffer without re-creating a new b开发者_运维技巧uffer? My goal is to analyze and change data within that buffer in chunks, without having to do a lot of buffer creation and data copying.
In this case, ultimately, the C library is doing all the manipulation of the buffer, so I don't actually have to change values within the buffer using Python. I just need to give my C function access to data within the buffer.
create_string_buffer gives you a ctypes object (an array of chars), then byref, and I quote,
Returns a light-weight pointer to obj, which must be an instance of a ctypes type. offset defaults to zero, and must be an integer that will be added to the internal pointer value.
The offset
argument has been added in 2.6, so if you're stuck with an older version you will unfortunately need more work.
You can also use ctypes.cast(buf, ctypes.c_void_p)
精彩评论