Here is the version that fixes the problem:
- Code: Select all
/**
* Returns an image composed of a base image decorated by another image
* @param baseImage Image The base image that should be decorated
* @param decorator Image The image to decorate the base image
* @param corner The corner to place decorator image
* @return Image The resulting decorated image
*/
public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
HashMap decoratedMap = (HashMap) m_ImageToDecoratorMap.get(baseImage);
if (decoratedMap == null) {
decoratedMap = new HashMap();
m_ImageToDecoratorMap.put(baseImage, decoratedMap);
}
Image result = (Image) decoratedMap.get(decorator);
if (result == null) {
final Rectangle bid = baseImage.getBounds();
final Rectangle did = decorator.getBounds();
final Point baseImageSize = new Point(bid.width, bid.height);
CompositeImageDescriptor compositImageDesc = new CompositeImageDescriptor() {
protected void drawCompositeImage(int width, int height) {
drawImage(baseImage.getImageData(), 0, 0);
if (corner == TOP_LEFT) {
drawImage(decorator.getImageData(), 0, 0);
} else if (corner == TOP_RIGHT) {
drawImage(decorator.getImageData(), bid.width - did.width - 1, 0);
} else if (corner == BOTTOM_LEFT) {
drawImage(decorator.getImageData(), 0, bid.height - did.height - 1);
} else if (corner == BOTTOM_RIGHT) {
drawImage(decorator.getImageData(), bid.width - did.width - 1, bid.height - did.height - 1);
}
}
protected Point getSize() {
return baseImageSize;
}
};
result = compositImageDesc.createImage();
decoratedMap.put(decorator, result);
}
return result;
}
I'm using CompositeImageDescriptor to let it deal with the transparency.