2 * Imagesqueeze - Image codec optimized for photos.
3 * Copyright (C) 2012, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of version 2 of the GNU General Public License
7 * as published by the Free Software Foundation.
10 package eu.svjatoslav.imagesqueeze.codec;
12 import java.awt.image.BufferedImage;
13 import java.io.ByteArrayInputStream;
14 import java.io.ByteArrayOutputStream;
16 import java.io.FileInputStream;
17 import java.io.FileOutputStream;
18 import java.io.IOException;
19 import java.io.InputStream;
20 import java.io.OutputStream;
22 import eu.svjatoslav.commons.data.BitInputStream;
23 import eu.svjatoslav.commons.data.BitOutputStream;
26 * Main class representing compressed image.
31 public ImageMetaData metaData;
33 public BufferedImage bufferedImage;
41 * Initialize imagesqueeze image based on {@link BufferedImage}.
42 * {@link BufferedImage} must be of type BufferedImage.TYPE_3BYTE_BGR .
44 public Image(final BufferedImage image) {
46 bufferedImage = image;
47 metaData = new ImageMetaData();
50 metaData.width = image.getWidth();
51 metaData.height = image.getHeight();
55 * Initialize empty imagesqueeze image.
57 public Image(final int width, final int height) {
59 bufferedImage = new BufferedImage(width, height,
60 BufferedImage.TYPE_3BYTE_BGR);
61 metaData = new ImageMetaData();
64 metaData.width = width;
65 metaData.height = height;
69 * Load ImgSqz image from {@link File}.
71 public void loadImage(final File source) throws IOException {
73 final byte[] fileContent = new byte[(int) source.length()];
75 final FileInputStream fileInputStream = new FileInputStream(source);
77 fileInputStream.read(fileContent);
79 fileInputStream.close();
81 final ByteArrayInputStream inputStream = new ByteArrayInputStream(
84 loadImage(inputStream);
88 * Load ImgSqz image from {@link InputStream}.
90 public void loadImage(final InputStream source) throws IOException {
91 final BitInputStream bitInputStream = new BitInputStream(source);
93 metaData = new ImageMetaData();
94 metaData.load(bitInputStream);
96 bufferedImage = new BufferedImage(metaData.width, metaData.height,
97 BufferedImage.TYPE_3BYTE_BGR);
99 final ImageDecoder imageDecoder = new ImageDecoder(this, bitInputStream);
101 imageDecoder.decode();
105 * Save image into ImgSqz file format.
107 public void saveImage(final File file) throws IOException {
108 final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
109 saveImage(outputStream);
111 final byte[] buffer = outputStream.toByteArray();
112 final FileOutputStream fileOutputStream = new FileOutputStream(file);
113 fileOutputStream.write(buffer);
114 fileOutputStream.close();
118 * Save image into ImgSqz file format.
120 public void saveImage(final OutputStream outputStream) throws IOException {
122 final BitOutputStream bitOutputStream = new BitOutputStream(
125 metaData.save(bitOutputStream);
127 if (encoder == null) {
128 encoder = new ImageEncoder(this);
131 encoder.encode(bitOutputStream);
133 bitOutputStream.finishByte();