[Numpy-discussion] convert to numarray
Pete Shinners
pete at shinners.org
Sun Jun 8 11:41:03 EDT 2003
in the pygame project i've had the ability to map images into Numeric
data arrays onto image pixel data. This has worked excellently for me,
but in the near future i'd also like to support numarray.
early in numarray's development it looked like this was not going to be
possible at all. i've been following numarray loosely, and it sure looks
like things have 'loosened' up a bit. still there are a few things i am
doing that i'm unsure if numarray is ready to handle yet?
what is going to make this tricky is i'm doing a bit of 'attribute
mangling' to the Numeric array structure. this is necessary as the image
data is extremely 'non-flat'. also, since i am referencing data held in
another python object, i need to make sure the array holds a reference
to the original object. these are the things i'm afraid i'll be stuck on.
here is pretty much what i am doing now, simplified quite a bit...
PyObject* pixelsarray(SDL_Surface *surf)
{
int dim[3];
PyObject *array;
dim[0] = surf->w;
dim[1] = surf->h;
dim[2] = 3;
array = PyArray_FromDimsAndData(3, dim,
PyArray_UBYTE, surf->pixels);
if(array)
{
PyArrayObject *a = (PyArrayObject*)array
a->flags = OWN_DIMENSIONS|OWN_STRIDES;
a->strides[2] = 1;
a->strides[1] = surf->pitch;
a->strides[0] = surf->format->BytesPerPixel;
a->base = _pyobject_to_surf_;
}
return array;
}
note that depending on pixel packing and endianess, the strides[2] can
become -1. smiley. also pretend a->base is pointing to a real python
object, which it does in the real version.
there is likely a way to workaround the "base" requirement with weakrefs
i suppose, but i'd rather not jump through the extra hoops. the real
necessity is setting the strides how i want. i didn't see any array
creation functions that allow me to pick my own strides. once i create
the array here i never change any of the array attributes.
if this looks doable then it's time for me to sit down with the numarray
docs and see what new and exciting things await me :]
More information about the NumPy-Discussion
mailing list