Hi Ajay,
We have some code in our project that needs to combine two images
into one, and this is a little snippet of what we do:
private static GraphicsEnvironment ge = null;
private static GraphicsDevice gd = null;
private static GraphicsConfiguration gc = null;
static {
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gd = ge.getDefaultScreenDevice();
gc = gd.getDefaultConfiguration();
}
/**
* Create an overlay image by combining the base with the overlay.
* <p> Assumes the overlay image will have a transparent background
where it should
* let the base image show through.
*
* @param baseImage The basic image that will determine the
size and type of the overlaid result.
* @param overlayImage The overlay to apply to the base image.
* @return The resulting image, same type and size as
the baseImage passed in.
*/
public static BufferedImage createOverlayImage(BufferedImage
baseImage, BufferedImage overlayImage) {
BufferedImage resultImage =
gc.createCompatibleImage(baseImage.getWidth(), baseImage.getHeight(),
Transparency.TRANSLUCENT);
Graphics2D graphics = resultImage.createGraphics();
graphics.drawImage(baseImage, 0, 0, null);
graphics.drawImage(overlayImage, 0, 0, null);
return resultImage;
}
/**
* Load an image file and convert to {@link BufferedImage} if possible.
*
* @param imageName The name of the image file to load.
* @return If the image is a {@link Picture} then return the
* {@link BufferedImage} representation of it.
* @throws IllegalArgumentException if the input image is not a
bitmap.
*/
public static BufferedImage getBufferedImage(String imageName) {
Image img = loadImage(imageName);
if (img instanceof Picture) {
return ((Picture)img).getBufferedImage();
}
else
throw new IllegalArgumentException(String.format("Image '%1$s'
is not of the proper type.", imageName));
}
/**
* Create an overlaid image from a base and an overlay (a state
indicator).
*
* @param baseName The name of the base image file (retrieved
from image cache
* if possible.
* @param overlayName The name of the overlay image file.
* @return The overlaid image, suitable for use as an icon.
*/
public static Image createOverlayImage(String baseName, String
overlayName) {
BufferedImage baseImage = getBufferedImage(baseName);
BufferedImage overlayImage = getBufferedImage(overlayName);
return new Picture(createOverlayImage(baseImage, overlayImage));
}
/** This is where we actually use the overlaid icon to set back
into a Pivot icon. */
public void setIcon(boolean enabled) {
if (enabled) {
branch.setIcon(loadImage(iconName));
}
else {
branch.setIcon(createOverlayImage(iconName,
"warning-overlay.gif"));
}
}
Hopefully you can glean some insight out of this. We're basically
talking about standard Graphics2D stuff here, so not really Pivot specific.
~Roger
On 9/18/13 2:16 AM, Ajay Bhat wrote:
Hi,
I'd like to use Graphics2D to draw an image on ImageView :
<BoxPane styles="{horizontalAlignment:'center',
verticalAlignment:'center'}">
<ImageView bxml:id="imgview" preferredWidth="64"
preferredHeight="64" styles="{fill:true}" />
<Label text="My Image" />
</BoxPane>
My code is :
ImageView imgview = (ImageView)
bxmlSerializer.getNamespace().get("imgview");
//put an image in imgview, with the graphic returned from below function
public Graphics2D makegraphic() {
Dimension d = new Dimension(200,200);
//drew a graphics object using this dimension and returned it.
}
Can I get some help with this?
-
Ajay Bhat