java-org.hwo/src/org/hwo/image/imageio/ImageIOFile.java

112 lines
2.1 KiB
Java

package org.hwo.image.imageio;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;
import org.hwo.image.ImageFile;
public class ImageIOFile implements ImageFile {
private String imageType;
private ImageReader imageReader;
private ImageWriter imageWriter;
private LinkedList<BufferedImage> images;
public ImageIOFile(String imageType)
{
this.imageType = imageType;
imageReader = ImageIO.getImageReadersByFormatName(imageType).next();
imageWriter = ImageIO.getImageWritersByFormatName(imageType).next();
images = new LinkedList<BufferedImage>();
}
@Override
public ImageFile newInstance() {
return new ImageIOFile(imageType);
}
@Override
public Boolean identify(File imageFile) {
return imageFile.getName().endsWith("." + imageType);
}
@Override
public void reset() {
imageReader.reset();
imageWriter.reset();
}
@Override
public void load(File imageFile) {
reset();
try
{
ImageInputStream iis = ImageIO.createImageInputStream(imageFile);
imageReader.setInput(iis);
images.clear();
int nImages = imageReader.getNumImages(true);
for (int n=0;n<nImages;n++)
images.add(imageReader.read(n));
iis.close();
imageReader.reset();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
@Override
public void save(File imageFile) {
reset();
try
{
ImageOutputStream ios = ImageIO.createImageOutputStream(imageFile);
imageWriter.setOutput(ios);
for (int n=0;n<images.size();n++)
imageWriter.write(images.get(n));
ios.close();
imageWriter.reset();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
@Override
public Integer getNumPages() {
return images.size();
}
@Override
public BufferedImage getPage(Integer pageNo) {
return images.get(pageNo);
}
@Override
public void addPage(BufferedImage image) {
images.add(image);
}
}