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
<[email protected]>