X-Git-Url: http://www2.svjatoslav.eu/gitweb/?p=imagesqueeze.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fimagesqueeze%2Fcodec%2FImage.java;h=6804a6330a5d4d4e8e047cd03e488d8d1a6a581f;hp=c644eaa089cfbc6561b28ceae2ede8a4f377dd7f;hb=HEAD;hpb=c7d0b8e1723045c0df086d9214a35f54db47684c diff --git a/src/main/java/eu/svjatoslav/imagesqueeze/codec/Image.java b/src/main/java/eu/svjatoslav/imagesqueeze/codec/Image.java index c644eaa..6804a63 100755 --- a/src/main/java/eu/svjatoslav/imagesqueeze/codec/Image.java +++ b/src/main/java/eu/svjatoslav/imagesqueeze/codec/Image.java @@ -1,14 +1,14 @@ +/* + * Image codec. Author: Svjatoslav Agejenko, svjatoslav@svjatoslav.eu + * This project is released under Creative Commons Zero (CC0) license. + */ package eu.svjatoslav.imagesqueeze.codec; +import eu.svjatoslav.commons.data.BitInputStream; +import eu.svjatoslav.commons.data.BitOutputStream; + 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 java.io.*; /** * Main class representing compressed image. @@ -16,105 +16,108 @@ import java.io.OutputStream; public class Image { - public ImageMetaData metaData; - - public BufferedImage bufferedImage; - - ImageEncoder encoder; - - public Image(){}; + public ImageMetaData metaData; - /** - * Initialize imagesqueeze image based on {@link BufferedImage}. {@link BufferedImage} must be of type BufferedImage.TYPE_3BYTE_BGR . - */ - public Image(BufferedImage image){ + public BufferedImage bufferedImage; - this.bufferedImage = image; - metaData = new ImageMetaData(); + private ImageEncoder encoder; - metaData.version = 1; - metaData.width = image.getWidth(); - metaData.height = image.getHeight(); - } + public Image() { + } - /** - * Initialize empty imagesqueeze image. - */ - public Image(int width, int height){ + /** + * Initialize imagesqueeze image based on {@link BufferedImage}. + * {@link BufferedImage} must be of type BufferedImage.TYPE_3BYTE_BGR . + */ + public Image(final BufferedImage image) { - this.bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); - metaData = new ImageMetaData(); + bufferedImage = image; + metaData = new ImageMetaData(); - metaData.version = 1; - metaData.width = width; - metaData.height = height; - } + metaData.version = 1; + metaData.width = image.getWidth(); + metaData.height = image.getHeight(); + } - /** - * Load ImgSqz image from {@link InputStream}. - */ - public void loadImage(InputStream source) throws IOException{ - BitInputStream bitInputStream = new BitInputStream(source); + /** + * Initialize empty imagesqueeze image. + */ + public Image(final int width, final int height) { - metaData = new ImageMetaData(); - metaData.load(bitInputStream); + bufferedImage = new BufferedImage(width, height, + BufferedImage.TYPE_3BYTE_BGR); + metaData = new ImageMetaData(); - bufferedImage = new BufferedImage(metaData.width, metaData.height, BufferedImage.TYPE_3BYTE_BGR); + metaData.version = 1; + metaData.width = width; + metaData.height = height; + } - ImageDecoder imageDecoder = new ImageDecoder(this, bitInputStream); + /** + * Load ImgSqz image from {@link File}. + */ + public void loadImage(final File source) throws IOException { - imageDecoder.decode(); - } + final byte[] fileContent = new byte[(int) source.length()]; - /** - * Load ImgSqz image from {@link File}. - */ - public void loadImage(File source) throws IOException{ + try (FileInputStream fileInputStream = new FileInputStream(source)) { + if (fileInputStream.read(fileContent) != fileContent.length) + throw new RuntimeException("Failed to read file content"); + } - byte [] fileContent = new byte[(int)source.length()]; + final ByteArrayInputStream inputStream = new ByteArrayInputStream( + fileContent); - FileInputStream fileInputStream = new FileInputStream(source); + loadImage(inputStream); + } - fileInputStream.read(fileContent); + /** + * Load ImgSqz image from {@link InputStream}. + */ + public void loadImage(final InputStream source) throws IOException { + final BitInputStream bitInputStream = new BitInputStream(source); - fileInputStream.close(); + metaData = new ImageMetaData(); + metaData.load(bitInputStream); - ByteArrayInputStream inputStream = new ByteArrayInputStream(fileContent); + bufferedImage = new BufferedImage(metaData.width, metaData.height, + BufferedImage.TYPE_3BYTE_BGR); - loadImage(inputStream); - } + final ImageDecoder imageDecoder = new ImageDecoder(this, bitInputStream); - /** - * Save image into ImgSqz file format. - */ - public void saveImage(OutputStream outputStream) throws IOException{ + imageDecoder.decode(); + } - BitOutputStream bitOutputStream = new BitOutputStream(outputStream); + /** + * Save image into ImgSqz file format. + */ + public void saveImage(final File file) throws IOException { + final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + saveImage(outputStream); - metaData.save(bitOutputStream); - - if (encoder == null){ - encoder = new ImageEncoder(this); - } + final byte[] buffer = outputStream.toByteArray(); + try (FileOutputStream fileOutputStream = new FileOutputStream(file)) { + fileOutputStream.write(buffer); + } + } - encoder.encode(bitOutputStream); + /** + * Save image into ImgSqz file format. + */ + private void saveImage(final OutputStream outputStream) throws IOException { - bitOutputStream.finishByte(); - } + final BitOutputStream bitOutputStream = new BitOutputStream( + outputStream); + metaData.save(bitOutputStream); - /** - * Save image into ImgSqz file format. - */ - public void saveImage(File file) throws IOException{ - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - saveImage(outputStream); + if (encoder == null) { + encoder = new ImageEncoder(this); + } - byte [] buffer = outputStream.toByteArray(); - FileOutputStream fileOutputStream = new FileOutputStream(file); - fileOutputStream.write(buffer); - fileOutputStream.close(); - } + encoder.encode(bitOutputStream); + bitOutputStream.finishByte(); + } }