Mam do czynienia z buforami obrazu, i chcę mieć możliwość uzyskania dostępu do danych kilka linii w moim obrazie do analizy z biblioteką c. Stworzyłem 8-bitowy bufor pikseli w Pythonie za pomocą create_string_buffer. Czy istnieje sposób, aby uzyskać wskaźnik do lokalizacji w tym buforze bez ponownego tworzenia nowego bufora? Moim celem jest analizowanie i zmienianie danych w tym buforze w porcjach, bez konieczności tworzenia wielu buforów i kopiowania danych.ctypes i manipulacja wskaźnikami
W tym przypadku biblioteka C wykonuje całą operację buforowania, więc nie muszę zmieniać wartości w buforze przy użyciu Pythona. Po prostu muszę dać mojej funkcji C dostęp do danych w buforze.
Jedno jest trochę mylące, though-- Załóżmy, robię, co następuje: "buff = create_string_buffer (10)". Czy przejście "byref (buff, 3)" przebiega "& (buff [3])" lub "(& buff) + 3)"? – Chris
@Chris, oba wyrażenia są równoważne - w C, 'i X [Y] == X + Y' jest tautologią dla dowolnego wskaźnika X (tablice" rozpadają się na "wskaźniki w C) i całkowitą Y. (Tutaj, elementy tablicy są po 1 bajcie, więc nie ma nawet najmniejszych wątpliwości co do "skalowania" w arytmecie wskaźnika ;-). –
Zdaję sobie sprawę, że są one równoważne w C, ale nie byłem pewien, jak zareagują ctypes ... innymi słowy, czy przekazałby wskaźnik zwiększony o 3, czy wskaźnik do instancji Pythona zwiększonej o trzy lub coś dziwnego że. Jak zwykle jednak python jest inteligentny i przekazuje wskaźnik C zwiększony o trzy. Dzięki za pomoc! – Chris