protected Resource createResource(Java2DUserResource resource) { boolean cacheable = isCacheableSet(resource.getClass()); boolean versioned = isVersionedSet(resource.getClass()); if (resource instanceof Java2DAnimatedUserResource) { Java2DAnimatedUserResource java2DAnimatedUserResource = (Java2DAnimatedUserResource) resource; return new Java2DAnimatedUserResourceWrapperImpl(java2DAnimatedUserResource, cacheable, versioned); } else { return new Java2DUserResourceWrapperImpl(resource, cacheable, versioned); } }
@Override public String getRequestPath() { // detect unsupported types early checkSupportedFormat(getWrapped().getImageType()); return super.getRequestPath(); }
@Override protected void paintAndWrite(ImageOutputStream outputStream) throws IOException { Java2DAnimatedUserResource userResource = (Java2DAnimatedUserResource) getWrapped(); checkSupportedFormat(imageType); ImageWriter imageWriter = getSequenceCapableImageWriter(imageType); Dimension dimension = userResource.getDimension(); BufferedImage image = imageType.createImage(dimension); String metaFormatName = imageMetaData.getNativeMetadataFormatName(); Node root = imageMetaData.getAsTree(metaFormatName); IIOMetadataNode graphicsControlExtensionNode = (IIOMetadataNode) getOrCreateChild(root, "GraphicControlExtension"); graphicsControlExtensionNode.setAttribute("transparentColorIndex", "0"); Node applicationExtensionsNode = getOrCreateChild(root, "ApplicationExtensions"); IIOMetadataNode netscapeExtension = new IIOMetadataNode("ApplicationExtension"); Graphics2D g2d = null; try { g2d = createGraphics(image); userResource.paint(g2d); imageWriter.writeToSequence(new IIOImage(image, null, imageMetaData), defaultImageWriteParam);