EDIT: En relisant ma question initiale, j'ai réalisé très rapidement que c'était très mal formulé, ambigu, et trop confus pour obtenir une réponse décente. C'est ce que je reçois pour répondre à une question à la fin de ma pause déjeuner. J'espère que cela sera plus clair:Création d'un PyBuffer à partir d'un struct struct
J'essaie d'exposer une structure C simple à Python (3.x) en tant que PyBuffer afin que je puisse en récupérer une MemoryView. La structure que je veux exposer est semblable à ceci:
struct ImageBuffer {
void* bytes;
int row_count;
int bytes_per_row;
};
et il est mon désir de permettre à l'auteur de script pour accéder aux données comme ceci:
img_buffer = img.get_buffer()
img_buffer[1::4] = 255 # Set every Red component to full intensity
Malheureusement la documentation existante sur l'API C car ces structures sont plutôt clairsemées, auto-contradictoires par endroits et carrément erronées chez les autres (les signatures documentées des fonctions ne correspondent pas à celles des en-têtes, etc.). Je n'ai donc pas une très bonne idée de la meilleure façon de l'exposer. Aussi, je voudrais éviter d'inclure des librairies tierces pour réaliser des fonctionnalités qui devraient faire partie des librairies principales, mais il me semble que la fonctionnalité PyBuffer est encore assez immature, et peut-être que quelque chose comme NumPy serait un meilleur choix.
Quelqu'un a-t-il un conseil à ce sujet?
Vraiment? Les visions de mémoire ne coupent pas? Je pensais que c'était censé être le grand avantage de les utiliser. Est-ce qu'ils supportent au moins l'indexation de base? Le but de ma tentative d'exposer cette mémoire est de permettre aux développeurs Python de manipuler des données d'image au niveau octet, et s'ils ne peuvent pas faire d'indexation ou de découpage de base, cette méthode est inutile pour moi. – Toji
Voir la version éditée ci-dessus. –
Ah, merci pour la clarification. C'est plus conforme à ce que je pensais. Je vais devoir jouer avec ça et voir si je peux trouver un bon moyen de réaliser ce que je veux. Merci encore! – Toji