[quote]This is the top of one of my classes. I’m at work right now, so this is from the CVS repository at java.net. I will be passing an image loaded from ImageIO into this method:
/**
* A set of utility methods to load images
*
* @author Kevin Glass
*/
public class ImageLoader {
public static int TRANSPARENCY = Transparency.BITMASK;
public static Image createMaskedImage(Image src) {
Image image;
GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
image = gc.createCompatibleImage(src.getWidth(null), src.getHeight(null),
TRANSPARENCY);
image.getGraphics().drawImage(src,0,0,null);
return image;
}
And using the returned image.
Kev
[/quote]
Thats where your bug is! 
You are assuming the image returned from createCompatibleImage() starts off totally transparent.
It does in the Windows JRE, but it is not guaranteed to.
(and looks like Apple decided to go with something different ::))
(incidentally, I ran into this same bug in J2ME 
The Sun MIDP reference implementation initialises images to White, where as the Nokia implementation initialises to Black ::))
You should change your load code to look something like this (so you are guaranteed to maintain the Alpha in the source image) :-
import java.awt.*;
import java.awt.image.*;
public class ImageLoader
{
final GraphicsConfiguration gc;
public ImageLoader(GraphicsConfiguration gc)
{
if(gc==null)
{
gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
}
this.gc = gc;
}
public BufferedImage loadImage(String resource)
{
try
{
BufferedImage src = javax.imageio.ImageIO.read(getClass().getResource(resource));
//Images returned from ImageIO are NOT managedImages
//Therefor, we copy it into a ManagedImage
BufferedImage dst = gc.createCompatibleImage(src.getWidth(),src.getHeight(),src.getColorModel().getTransparency());
Graphics2D g2d = dst.createGraphics();
g2d.setComposite(AlphaComposite.Src);
g2d.drawImage(src,0,0,null);
g2d.dispose();
return dst;
}
catch(java.io.IOException e)
{
return null;
}
}
}