EDIT: После повторного чтения моего первоначального вопроса я понял очень быстро, что он был очень плохо сформулирован, неоднозначен и слишком запутан, чтобы когда-либо получить достойный ответ. Это то, что я получаю для того, чтобы срочно решить вопрос в конце обеденного перерыва. Надеюсь, это будет яснее:Создание PyBuffer из C-структуры
Я пытаюсь открыть простую структуру C для Python (3.x) в качестве PyBuffer, чтобы я мог извлечь из нее MemoryView. Структура Я хочу выставить похожа на это:
struct ImageBuffer {
void* bytes;
int row_count;
int bytes_per_row;
};
и это мое желание, чтобы автор сценария для доступа к данным, как так:
img_buffer = img.get_buffer()
img_buffer[1::4] = 255 # Set every Red component to full intensity
К сожалению, существующей документации о C API поскольку эти структуры довольно разрежены, само противоречивы по своим местам и совершенно ошибочны в других (документированные сигнатуры функций не соответствуют таковым в заголовках и т. д.). Поэтому у меня нет очень хорошего представления о том, как наилучшим образом разоблачить это. Кроме того, я хотел бы избежать включения сторонних библиотек для достижения функциональности, которая должна быть частью основных библиотек, но мне кажется, что функциональность PyBuffer все еще довольно незрелая, и, возможно, что-то вроде NumPy будет лучшим выбором.
У кого-нибудь есть совет по этому вопросу?
Действительно? Memoryviews не делают нарезки? Я думал, что это должно быть большой выгодой от их использования. По крайней мере, они поддерживают базовое индексирование? Все, что я пытаюсь разоблачить эту память, - позволить разработчикам Python манипулировать данными изображения на уровне байтов, и если они не могут выполнять базовую индексацию или нарезку, то этот метод бесполезен для меня. – Toji
См. Отредактированную версию выше. –
А, спасибо за разъяснение. Это больше соответствует тому, что я думал. Мне придется поиграть с этим и посмотреть, смогу ли я найти хороший способ добиться того, чего хочу. Еще раз спасибо! – Toji