ctypes и манипулирование указателями - PullRequest
5 голосов
/ 22 марта 2010

Я имею дело с буферами изображения и хочу иметь возможность получить доступ к данным на несколько строк в моем изображении для анализа с помощью библиотеки ac.Я создал свой 8-битный пиксельный буфер в Python, используя create_string_buffer.Есть ли способ получить указатель на местоположение в этом буфере без повторного создания нового буфера?Моя цель состоит в том, чтобы анализировать и изменять данные в этом буфере порциями, без необходимости делать много буферов и копировать данные.

В этом случае, в конечном счете, библиотека C выполняет все манипуляции с буферомтак что на самом деле мне не нужно менять значения в буфере, используя Python.Мне просто нужно дать моей функции C доступ к данным в буфере.

Ответы [ 2 ]

8 голосов
/ 22 марта 2010

create_string_buffer дает вам объект ctypes (массив символов), затем byref , и я цитирую

Возвращает легкий указатель на obj, который должен быть экземпляром ctypes тип. смещение по умолчанию равно нулю, и должно быть целым числом, которое будет добавлено на значение внутреннего указателя.

Аргумент offset был добавлен в 2.6, поэтому, если вы застряли с более старой версией, вам, к сожалению, потребуется больше работы.

0 голосов
/ 22 марта 2010

Вы также можете использовать ctypes.cast(buf, ctypes.c_void_p)

...