2 * Image codec. Author: Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
3 * This project is released under Creative Commons Zero (CC0) license.
5 package eu.svjatoslav.imagesqueeze.codec;
7 import eu.svjatoslav.commons.data.BitInputStream;
8 import eu.svjatoslav.commons.data.BitOutputStream;
10 import java.awt.image.BufferedImage;
14 * Main class representing compressed image.
19 public ImageMetaData metaData;
21 public BufferedImage bufferedImage;
23 private ImageEncoder encoder;
29 * Initialize imagesqueeze image based on {@link BufferedImage}.
30 * {@link BufferedImage} must be of type BufferedImage.TYPE_3BYTE_BGR .
32 public Image(final BufferedImage image) {
34 bufferedImage = image;
35 metaData = new ImageMetaData();
38 metaData.width = image.getWidth();
39 metaData.height = image.getHeight();
43 * Initialize empty imagesqueeze image.
45 public Image(final int width, final int height) {
47 bufferedImage = new BufferedImage(width, height,
48 BufferedImage.TYPE_3BYTE_BGR);
49 metaData = new ImageMetaData();
52 metaData.width = width;
53 metaData.height = height;
57 * Load ImgSqz image from {@link File}.
59 public void loadImage(final File source) throws IOException {
61 final byte[] fileContent = new byte[(int) source.length()];
63 try (FileInputStream fileInputStream = new FileInputStream(source)) {
64 if (fileInputStream.read(fileContent) != fileContent.length)
65 throw new RuntimeException("Failed to read file content");
68 final ByteArrayInputStream inputStream = new ByteArrayInputStream(
71 loadImage(inputStream);
75 * Load ImgSqz image from {@link InputStream}.
77 public void loadImage(final InputStream source) throws IOException {
78 final BitInputStream bitInputStream = new BitInputStream(source);
80 metaData = new ImageMetaData();
81 metaData.load(bitInputStream);
83 bufferedImage = new BufferedImage(metaData.width, metaData.height,
84 BufferedImage.TYPE_3BYTE_BGR);
86 final ImageDecoder imageDecoder = new ImageDecoder(this, bitInputStream);
88 imageDecoder.decode();
92 * Save image into ImgSqz file format.
94 public void saveImage(final File file) throws IOException {
95 final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
96 saveImage(outputStream);
98 final byte[] buffer = outputStream.toByteArray();
99 try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
100 fileOutputStream.write(buffer);
105 * Save image into ImgSqz file format.
107 private void saveImage(final OutputStream outputStream) throws IOException {
109 final BitOutputStream bitOutputStream = new BitOutputStream(
112 metaData.save(bitOutputStream);
114 if (encoder == null) {
115 encoder = new ImageEncoder(this);
118 encoder.encode(bitOutputStream);
120 bitOutputStream.finishByte();