[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] surfarray on 64-bit machines



This was a long time ago (shame on me for not finding the time to
investigate this further):

> On Wed, Oct 22, 2008 at 7:23 PM, Marius Gedminas <marius@xxxxxxxxx> wrote:
> > A user reported that PySpaceWar fails on 64-bit Linux machines if I try
> > to scale the alpha channel.  Here's the code (simplified):
> >
> >    import pygame
> >    import Numeric
> >    image = pygame.image.load('title.png')   # has an alpha channel
> >    mask = pygame.surfarray.array_alpha(image).astype(Numeric.Int)
> >    array = pygame.surfarray.pixels_alpha(self.image)
> >    alpha = 42.5 # a float between 1 and 255
> >    array[:] = (mask * alpha / 255).astype(Numeric.UnsignedInt8)
> >
> > The error happens on the last line, and it says
> >
> >    ValueError: matrices are not aligned for copy
> >
> > Any ideas?  The code works fine on 32-bit systems.

On Wed, Oct 22, 2008 at 09:28:46PM -0500, Charlie Nolan wrote:
> I may be having this same error.  I've got a bug report with that same
> error message at one point (and on a 64-bit machine), even though it
> works fine on my (32-bit) machine.  Could you try printing out
> "array[:].shape"?  In my case, I do a sensible slice and somehow end
> up with a 0x600 array.

On a 32-bit machine:

  array[:].shape == array.shape == (333, 83)

On a 64-bit machine:

  array[:].shape == (0, 83)

On Wed, Oct 22, 2008 at 07:46:53PM -0700, Lenard Lindstrom wrote:
> I am curious, but what happens if array[:] is replaced with array[...].  

The code starts working!  Thank you!

> It is a two dimension array, so I am surprised the single index slice  
> [:] even works.

(on 32-bit only, for some reason).

> The alternate form [..] is indifferent to array 
> dimension.

It's a thinko on my part.  I want an in-place assignment, I tend to
write container[:] = new_value, without considering dimensionality at
all.

Cheers!
Marius Gedminas
-- 
A programmer started to cuss
Because getting to sleep was a fuss
As he lay there in bed
Looping 'round in his head
was: while(!asleep()) sheep++;

Attachment: signature.asc
Description: Digital signature