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

Re: [pygame] Blitting to alpha channel or using another image's alpha channel



Weeble wrote:
Can somebody suggest how to do this? I want to render parts of an
image based on a dynamically generated mask. Right now I'm doing this
by drawing the mask in black and white on another surface, then
iterating over every pixel and changing the alpha value of the source
image to match the red value of the corresponding pixel in the mask
surface, then finally blitting this onto the target surface. This
seems a bit convoluted and I get the feeling there's probably a more
efficient way to do it. Is there a way either to 1. blit an 8-bit
greyscale image directly into the alpha channel of an image, or 2.
directly blit image A onto image B using image C as the alpha channel?
You can use the BLEND_RGBA_MIN flag with a surface blit. Make sure the mask is all black and that all the target surface pixels have an alpha of 255. Before that was available (Python 1.8.1?) there was the surfarray module. surfarray.pixels_alpha lets one get at the alpha plane of a surface and manipulate it with array operations. See the shadowed effects in the Pygame cookbook for an example:

http://www.pygame.org/wiki/ShadowEffects?parent=CookBook

But you need either NumPy or Numeric for this to work.

--
Lenard Lindstrom
<len-l@xxxxxxxxx>