package eu.svjatoslav.imagesqueeze.codec;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
import eu.svjatoslav.commons.data.BitInputStream;
import eu.svjatoslav.commons.data.BitOutputStream;
+import java.awt.image.BufferedImage;
+import java.io.*;
+
/**
* Main class representing compressed image.
*/
public class Image {
- public ImageMetaData metaData;
-
- public BufferedImage bufferedImage;
-
- ImageEncoder encoder;
+ public ImageMetaData metaData;
- public Image() {
- };
+ public BufferedImage bufferedImage;
- /**
- * Initialize imagesqueeze image based on {@link BufferedImage}.
- * {@link BufferedImage} must be of type BufferedImage.TYPE_3BYTE_BGR .
- */
- public Image(final BufferedImage image) {
+ private ImageEncoder encoder;
- bufferedImage = image;
- metaData = new ImageMetaData();
+ public Image() {
+ }
- metaData.version = 1;
- metaData.width = image.getWidth();
- metaData.height = image.getHeight();
- }
+ /**
+ * Initialize imagesqueeze image based on {@link BufferedImage}.
+ * {@link BufferedImage} must be of type BufferedImage.TYPE_3BYTE_BGR .
+ */
+ public Image(final BufferedImage image) {
- /**
- * Initialize empty imagesqueeze image.
- */
- public Image(final int width, final int height) {
+ bufferedImage = image;
+ metaData = new ImageMetaData();
- bufferedImage = new BufferedImage(width, height,
- BufferedImage.TYPE_3BYTE_BGR);
- metaData = new ImageMetaData();
+ metaData.version = 1;
+ metaData.width = image.getWidth();
+ metaData.height = image.getHeight();
+ }
- metaData.version = 1;
- metaData.width = width;
- metaData.height = height;
- }
+ /**
+ * Initialize empty imagesqueeze image.
+ */
+ public Image(final int width, final int height) {
- /**
- * Load ImgSqz image from {@link File}.
- */
- public void loadImage(final File source) throws IOException {
+ bufferedImage = new BufferedImage(width, height,
+ BufferedImage.TYPE_3BYTE_BGR);
+ metaData = new ImageMetaData();
- final byte[] fileContent = new byte[(int) source.length()];
+ metaData.version = 1;
+ metaData.width = width;
+ metaData.height = height;
+ }
- final FileInputStream fileInputStream = new FileInputStream(source);
+ /**
+ * Load ImgSqz image from {@link File}.
+ */
+ public void loadImage(final File source) throws IOException {
- fileInputStream.read(fileContent);
+ final byte[] fileContent = new byte[(int) source.length()];
- fileInputStream.close();
+ try (FileInputStream fileInputStream = new FileInputStream(source)) {
+ if (fileInputStream.read(fileContent) != fileContent.length)
+ throw new RuntimeException("Failed to read file content");
+ }
- final ByteArrayInputStream inputStream = new ByteArrayInputStream(
- fileContent);
+ final ByteArrayInputStream inputStream = new ByteArrayInputStream(
+ fileContent);
- loadImage(inputStream);
- }
+ loadImage(inputStream);
+ }
- /**
- * Load ImgSqz image from {@link InputStream}.
- */
- public void loadImage(final InputStream source) throws IOException {
- final BitInputStream bitInputStream = new BitInputStream(source);
+ /**
+ * Load ImgSqz image from {@link InputStream}.
+ */
+ public void loadImage(final InputStream source) throws IOException {
+ final BitInputStream bitInputStream = new BitInputStream(source);
- metaData = new ImageMetaData();
- metaData.load(bitInputStream);
+ metaData = new ImageMetaData();
+ metaData.load(bitInputStream);
- bufferedImage = new BufferedImage(metaData.width, metaData.height,
- BufferedImage.TYPE_3BYTE_BGR);
+ bufferedImage = new BufferedImage(metaData.width, metaData.height,
+ BufferedImage.TYPE_3BYTE_BGR);
- final ImageDecoder imageDecoder = new ImageDecoder(this, bitInputStream);
+ final ImageDecoder imageDecoder = new ImageDecoder(this, bitInputStream);
- imageDecoder.decode();
- }
+ imageDecoder.decode();
+ }
- /**
- * Save image into ImgSqz file format.
- */
- public void saveImage(final File file) throws IOException {
- final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- saveImage(outputStream);
+ /**
+ * Save image into ImgSqz file format.
+ */
+ public void saveImage(final File file) throws IOException {
+ final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ saveImage(outputStream);
- final byte[] buffer = outputStream.toByteArray();
- final FileOutputStream fileOutputStream = new FileOutputStream(file);
- fileOutputStream.write(buffer);
- fileOutputStream.close();
- }
+ final byte[] buffer = outputStream.toByteArray();
+ try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
+ fileOutputStream.write(buffer);
+ }
+ }
- /**
- * Save image into ImgSqz file format.
- */
- public void saveImage(final OutputStream outputStream) throws IOException {
+ /**
+ * Save image into ImgSqz file format.
+ */
+ private void saveImage(final OutputStream outputStream) throws IOException {
- final BitOutputStream bitOutputStream = new BitOutputStream(
- outputStream);
+ final BitOutputStream bitOutputStream = new BitOutputStream(
+ outputStream);
- metaData.save(bitOutputStream);
+ metaData.save(bitOutputStream);
- if (encoder == null) {
- encoder = new ImageEncoder(this);
- }
+ if (encoder == null) {
+ encoder = new ImageEncoder(this);
+ }
- encoder.encode(bitOutputStream);
+ encoder.encode(bitOutputStream);
- bitOutputStream.finishByte();
- }
+ bitOutputStream.finishByte();
+ }
}