package com.indyforge.twod.engine.resources; import java.awt.HeadlessException; import java.awt.image.BufferedImage; import java.io.IOException; import com.indyforge.twod.engine.graphics.GraphicsRoutines; import com.indyforge.twod.engine.resources.assets.AssetManager; /** * This class represents a serializable buffered image. * * @author Christopher Probst * @see Resource */ public final class BufferedImageResource implements Resource<BufferedImage> { /** * */ private static final long serialVersionUID = 1L; // The buffered image private transient BufferedImage image; private void writeObject(java.io.ObjectOutputStream out) throws IOException { // Write default vars out.defaultWriteObject(); if (!AssetManager.isHeadless()) { // Write some image information out.writeInt(image.getWidth()); out.writeInt(image.getHeight()); out.writeInt(image.getTransparency()); // Write all rgb values for (int x = 0; x < image.getWidth(); x++) { for (int y = 0; y < image.getHeight(); y++) { out.writeInt(image.getRGB(x, y)); } } } } private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException { // Read default vars in.defaultReadObject(); if (!AssetManager.isHeadless()) { // Ready the image data image = GraphicsRoutines.createImage(in.readInt(), in.readInt(), in.readInt()); // Read all rgb values for (int x = 0; x < image.getWidth(); x++) { for (int y = 0; y < image.getHeight(); y++) { image.setRGB(x, y, in.readInt()); } } } else { image = null; } } /** * Creates a new default image resource. * * @param image * The image you want to use. */ public BufferedImageResource(BufferedImage image) { if (image == null) { throw new NullPointerException("image"); } this.image = image; } /* * (non-Javadoc) * * @see com.indyforge.twod.engine.resources.Resource#get() */ @Override public BufferedImage get() { if (AssetManager.isHeadless()) { throw new HeadlessException(); } return image; } }