forked from LupusNobilis/java-org.hwo
112 lines
2.1 KiB
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);
|
|
}
|
|
|
|
|
|
|
|
}
|