Estoy tratando con los almacenamientos intermedios de imágenes, y quiero poder acceder a los datos unas pocas líneas en mi imagen para analizarlas con una biblioteca c. Creé mi memoria intermedia de píxeles de 8 bits en Python usando create_string_buffer. ¿Hay alguna manera de obtener un puntero a una ubicación dentro de ese búfer sin volver a crear un nuevo búfer? Mi objetivo es analizar y cambiar datos en ese buffer en fragmentos, sin tener que hacer una gran cantidad de creación de buffer y copia de datos.ctypes y manipulación de punteros
En este caso, en última instancia, la biblioteca C está haciendo toda la manipulación del búfer, por lo que en realidad no tiene que cambiar los valores dentro del búfer utilizando Python. Solo necesito darle acceso a mi función C a los datos dentro del buffer.
Una cosa que es un poco confuso, aunque-- Supongamos que hago lo siguiente: "buff = create_string_buffer (10)". ¿Pasará "byref (buff, 3)" pass "& (buff [3])" or "(& buff) + 3)"? – Chris
@Chris, las dos expresiones son equivalentes - en C, '& X [Y] == X + Y' es una tautología para cualquier puntero X (arrays" decay to "punteros en C) y entero Y. (Aquí, el los elementos de la matriz son de 1 byte cada uno, por lo que no puede haber ninguna duda acerca de "escalar" en la aritmética del puntero ;-). –
Me doy cuenta de que son equivalentes en C, pero no estaba seguro de cómo responderían los ctypes ... en otras palabras, ¿pasaría el puntero incrementado en 3, o un puntero a la instancia de pitón incrementado en tres, o algo raro como ese. Como siempre, sin embargo, Python es inteligente y pasa el puntero C incrementado en tres. ¡Gracias por la ayuda! – Chris