I have "overlay" images working thanks to Liz (thanks again!), however I was now wanting to place a second overlay (third image) over the top as a "special effect" in the form of an animated gif.
The code I am using is:
Code:
def setImageEffect = { picture, opicture, epicture, xpos, ypos, expos, eypos ->
def image = java.awt.Toolkit.getDefaultToolkit().getImage("images/"+picture)
def width = image.getWidth()
def height = image.getHeight()
def oimage = java.awt.Toolkit.getDefaultToolkit().getImage("images/"+opicture)
def owidth = oimage.getWidth()
def oheight = oimage.getHeight()
def eimage = java.awt.Toolkit.getDefaultToolkit().getImage("images/"+epicture)
def ewidth = eimage.getWidth()
def eheight = eimage.getHeight()
def frameBuffer = new java.awt.image.BufferedImage(width, height, java.awt.image.BufferedImage.TYPE_4BYTE_ABGR)
def sprite = javax.imageio.ImageIO.read(new File("images/"+picture))
def osprite = javax.imageio.ImageIO.read(new File("images/"+opicture))
def esprite = javax.imageio.ImageIO.read(new File("images/"+epicture))
java.awt.Graphics2D graphics = frameBuffer.createGraphics()
graphics.drawImage(sprite,0,0,width,height, null)
graphics.drawImage(osprite,xpos,ypos,owidth,oheight, null)
graphics.drawImage(esprite,expos,eypos,ewidth,eheight, null)
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream()
javax.imageio.ImageIO.write(frameBuffer, "png", baos)
setImage(baos.toByteArray(),0)
}
And this works! However, it only displays a single frame of the gif being called upon, rather than its usual animated (multi-frame) form.
What do I need to change in the code above to make the gif display normally (as it would if I just used
setImage("somegif.gif")?
(I am open to an easier way of doing this, too, such as being able to overlay a gif on top of an already called image, but the above was the only way I could get it to work for now)