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

Re: [pygame] surfarray on 64-bit machines



On Fri, Feb 27, 2009 at 08:04:30PM -0800, Lenard Lindstrom wrote:
> Marius Gedminas wrote:
>> Since I'm really clueless about
>> Numeric/numarray/numpy, please tell me if this code has any obvious
>> shortcomings:
>>
>>   # initialization, done once
>>   import pygame
>>   import numpy
>>   image = pygame.image.load('title.png')   # has an alpha channel
>>   mask = pygame.surfarray.array_alpha(image)
>>
>>   # this is done once every frame
>>   array = pygame.surfarray.pixels_alpha(image)
>>   alpha = 42.5 # a float varying between 1 and 255
>>   array[...] = (mask * alpha / 255).astype('b')
>>   
> Well, alpha and 255 are both scalars, so (mask * (alpha / 255)) saves  
> one intermediate array. Also the preferred NumPy convention is to use  
> dtypes (data-types) rather than type characters: .astype(numpy.uint8).  

I was using Numeric.UnsignedInt8 before, and couldn't find the NumPy
version of that in a hurry.  dir(array) showed me a typecode() method
which returned things like 'b', and so I tried those.

> But arithmetic operations have ufunc equivalents which take an optional  
> output array. This means the astype(), along with its intermediate  
> array, can be removed. It probably also means the intermediate array  
> float array goes away as well. So it is likely this alternative uses no  
> intermediate arrays.
>
> ## array = pygame.surfarray.pixels_alpha(image)
> alpha = 42.5
> ## array[...] = (mask * alpha / 255).astype('b')
> numpy.multiply(mask, alpha  /  255, pygame.surfarray.pixels_alpha(image))

Unfortunately this gives me a TypeError: return arrays must be of ArrayType

Marius Gedminas
-- 
... Another nationwide organization's computer system crashed twice in less
than a year. The cause of each crash was a computer virus....
                -- Paul Mungo, Bryan Glough  _Approaching_Zero_
(in 1986 computer crashes were something out of the ordinary.  Win95 anyone?)

Attachment: signature.asc
Description: Digital signature