
org.monte.media.image.BitmapCodec Maven / Gradle / Ivy
The newest version!
package org.monte.media.image;
import org.monte.media.AbstractVideoCodec;
import org.monte.media.Buffer;
import org.monte.media.Codec;
import org.monte.media.Format;
import org.monte.media.ilbm.ColorCyclingMemoryImageSource;
import org.monte.media.ilbm.ILBMDecoder;
import org.monte.media.pbm.PBMDecoder;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import static org.monte.media.VideoFormatKeys.*;
import static org.monte.media.BufferFlag.*;
public class BitmapCodec extends AbstractVideoCodec {
public BitmapCodec() {
super(new Format[]{
new Format(MediaTypeKey, MediaType.VIDEO, MimeTypeKey, MIME_JAVA,
EncodingKey, ENCODING_BUFFERED_IMAGE),
},
new Format[]{
new Format(MediaTypeKey, MediaType.VIDEO, MimeTypeKey, MIME_JAVA,
EncodingKey, ENCODING_BITMAP_IMAGE, DataClassKey, BitmapImage.class),
});
}
@Override
public int process(Buffer in, Buffer out) {
out.setMetaTo(in);
if (in.isFlag(DISCARD)) {
return CODEC_OK;
}
out.format = outputFormat;
try {
out.setFlag(KEYFRAME);
if (in.data instanceof File) {
File f = (File) in.data;
boolean success;
{
InputStream ins = new BufferedInputStream(new FileInputStream(f));
try {
ILBMDecoder d = new ILBMDecoder(ins);
ArrayList imgs = d.produceBitmaps();
BitmapImage img = imgs.get(0);
out.data = img;
success = true;
} catch (IOException e) {
success = false;
} finally {
ins.close();
}
}
if (!success) {
InputStream ins = new BufferedInputStream(new FileInputStream(f));
try {
PBMDecoder d = new PBMDecoder(ins);
ArrayList imgs = d.produce();
ColorCyclingMemoryImageSource mis = imgs.get(0);
out.data = BitmapImageFactory.toBitmapImage(mis);
success = true;
} catch (IOException e) {
success = false;
} finally {
ins.close();
}
}
if (!success) {
BufferedImage img = ImageIO.read(f);
out.data = BitmapImageFactory.toBitmapImage(img);
success = true;
}
} else if (in.data instanceof BitmapImage) {
out.data = in.data;
} else if (in.data instanceof BufferedImage) {
out.data = BitmapImageFactory.toBitmapImage((BufferedImage) in.data);
}
return CODEC_OK;
} catch (IOException e) {
e.printStackTrace();
out.setFlag(DISCARD);
return CODEC_FAILED;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy