Сначала вы можете создать неинициализированный массив:
pixarray = (ctypes.c_int * (w_px * h_px))()
, а затем скопируйте в него содержимое изображения:
# dylib in MacOSX, cdll.wincrt in Win, libc.so.? in Unix, ...
clib = ctypes.CDLL('libc.dylib')
_ = clib.memcpy(pixarray, im.tostring(), w_px * h_px * 4)
Возвращаемое значение memcpy - это адрес, который вас не волнует, поэтому я «проглотил» его, присвоив ему имя «единственное подчеркивание» (что по соглашению означает «меня это не волнует»; - ).
Редактировать : поскольку @Mu Mind указывает в комментарии, последний фрагмент может быть с пользой упрощен для использования ctypes.memmove без необходимости зависеть от платформы для поиска. clib
: просто сделайте
_ = ctypes.memmove(pixarray, im.tostring(), w_px * h_px * 4)