initial commit
[imagesqueeze.git] / src / main / java / eu / svjatoslav / imagesqueeze / codec / Image.java
1 package eu.svjatoslav.imagesqueeze.codec;
2
3 import java.awt.image.BufferedImage;
4 import java.io.ByteArrayInputStream;
5 import java.io.ByteArrayOutputStream;
6 import java.io.File;
7 import java.io.FileInputStream;
8 import java.io.FileOutputStream;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.io.OutputStream;
12
13 /**
14  * Main class representing compressed image.
15  */
16
17 public class Image {
18
19         public ImageMetaData metaData;
20
21         public BufferedImage bufferedImage;
22
23         ImageEncoder encoder;
24         
25         public Image(){};
26
27         /**
28          * Initialize imagesqueeze image based on {@link BufferedImage}. {@link BufferedImage} must be of type BufferedImage.TYPE_3BYTE_BGR .
29          */
30         public Image(BufferedImage image){
31
32                 this.bufferedImage = image;
33                 metaData = new ImageMetaData();
34
35                 metaData.version = 1;
36                 metaData.width = image.getWidth();
37                 metaData.height = image.getHeight();            
38         }
39
40         /**
41          * Initialize empty imagesqueeze image.
42          */
43         public Image(int width, int height){
44
45                 this.bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
46                 metaData = new ImageMetaData();
47
48                 metaData.version = 1;
49                 metaData.width = width;
50                 metaData.height = height;               
51         }
52
53         /**
54          * Load ImgSqz image from {@link InputStream}.
55          */
56         public void loadImage(InputStream source) throws IOException{
57                 BitInputStream bitInputStream = new BitInputStream(source);
58
59                 metaData = new ImageMetaData();
60                 metaData.load(bitInputStream);
61
62                 bufferedImage = new BufferedImage(metaData.width, metaData.height, BufferedImage.TYPE_3BYTE_BGR);
63
64                 ImageDecoder imageDecoder = new ImageDecoder(this, bitInputStream);
65
66                 imageDecoder.decode();
67         }
68
69         /**
70          * Load ImgSqz image from {@link File}.
71          */
72         public void loadImage(File source) throws IOException{
73
74                 byte [] fileContent = new byte[(int)source.length()];
75
76                 FileInputStream fileInputStream = new FileInputStream(source);
77
78                 fileInputStream.read(fileContent);
79
80                 fileInputStream.close();
81
82                 ByteArrayInputStream inputStream = new ByteArrayInputStream(fileContent);
83
84                 loadImage(inputStream);
85         }
86
87         /**
88          * Save image into ImgSqz file format.
89          */
90         public void saveImage(OutputStream outputStream) throws IOException{
91
92                 BitOutputStream bitOutputStream = new BitOutputStream(outputStream);
93
94                 metaData.save(bitOutputStream);
95                 
96                 if (encoder == null){
97                         encoder = new ImageEncoder(this);                       
98                 }
99
100                 encoder.encode(bitOutputStream);
101
102                 bitOutputStream.finishByte();
103         }
104
105
106         /**
107          * Save image into ImgSqz file format.
108          */
109         public void saveImage(File file) throws IOException{
110                 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
111                 saveImage(outputStream);
112
113                 byte [] buffer = outputStream.toByteArray();
114                 FileOutputStream fileOutputStream = new FileOutputStream(file);
115                 fileOutputStream.write(buffer);
116                 fileOutputStream.close();
117         }
118
119
120 }