Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.lib / org.gvsig.expressionevaluator.lib.impl / src / main / java / org / gvsig / expressionevaluator / impl / function / image / SimpleImage.java @ 44924

History | View | Annotate | Download (6.41 KB)

1
package org.gvsig.expressionevaluator.impl.function.image;
2

    
3
import java.awt.Graphics2D;
4
import java.awt.Image;
5
import java.awt.RenderingHints;
6
import java.awt.geom.AffineTransform;
7
import java.awt.image.BufferedImage;
8
import java.io.ByteArrayInputStream;
9
import java.io.File;
10
import java.io.IOException;
11
import java.io.OutputStream;
12
import java.net.URL;
13
import java.util.logging.Level;
14
import java.util.logging.Logger;
15
import javax.imageio.ImageIO;
16
import org.apache.commons.codec.DecoderException;
17
import org.apache.commons.codec.binary.Base64;
18
import org.apache.commons.codec.binary.Hex;
19

    
20
/**
21
 *
22
 * @author jjdelcerro
23
 */
24
public class SimpleImage {
25
    
26
    BufferedImage image = null;
27

    
28
    public SimpleImage() {
29
    }
30

    
31
    public SimpleImage(BufferedImage image) {
32
        this.image = image;
33
    }
34

    
35
    public SimpleImage(Object source) {
36
        this.image = this.load(source);
37
    }
38
    
39
    public boolean isEmpty() {
40
        return this.image == null;
41
    }
42

    
43
    public BufferedImage getBufferedImage() {
44
        return this.image;
45
    }
46

    
47
    public void set(BufferedImage image) {
48
        this.image = image;
49
    }
50

    
51
    public void set(Object source) {
52
        this.image = this.load(source);
53
    }
54

    
55
    private BufferedImage load(Object source) {
56
        BufferedImage theImage = null;
57
        try {
58
            if (source instanceof BufferedImage) {
59
                return (BufferedImage) source;
60
            } else if (source instanceof Image) {
61
                return null;
62
            } else if (source instanceof byte[]) {
63
                ByteArrayInputStream is = new ByteArrayInputStream((byte[]) source);
64
                theImage = ImageIO.read(is);
65
            } else if (source instanceof File) {
66
                theImage = ImageIO.read((File) source);
67
            } else if (source instanceof URL) {
68
                theImage = ImageIO.read((URL) source);
69
            } else if (source instanceof String) {
70
                String s = (String) source;
71
                byte[] data;
72
                try {
73
                    data = Hex.decodeHex(s.toCharArray());
74
                } catch (DecoderException ex) {
75
                    data = Base64.decodeBase64(s);
76
                }
77
                ByteArrayInputStream is = new ByteArrayInputStream(data);
78
                theImage = ImageIO.read(is);
79
            }
80
        } catch (IOException ex) {
81
            return null;
82
        }
83
        return theImage;
84
    }
85

    
86
    public void save(File output, String formatName) throws IOException {
87
        ImageIO.write(this.getBufferedImage(), formatName, output);
88
    }
89
    
90
    public void save(OutputStream output, String formatName) throws IOException {
91
        ImageIO.write(this.getBufferedImage(), formatName, output);
92
    }
93
    
94
    public int getWidth() {
95
        return this.image.getWidth();
96
    }
97
    
98
    public int getHeight() {
99
        return this.image.getHeight();
100
    }
101
    
102
    public SimpleImage resize(double factor) {
103
        BufferedImage theImage = this.getBufferedImage();
104
        int w = theImage.getWidth();
105
        int h = theImage.getHeight();
106
        int width = (int) (w * factor);
107
        int height = (int) (h * factor);
108
        BufferedImage newImage = new BufferedImage(width, height, theImage.getType());
109
        Graphics2D g = newImage.createGraphics();
110
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
111
        g.drawImage(theImage, 0, 0, width, height, 0, 0, w, h, null);
112
        g.dispose();
113
        return new SimpleImage(newImage);
114
    }
115

    
116
    public SimpleImage resize(int width, int height) {
117
        BufferedImage theImage = this.getBufferedImage();
118
        int w = theImage.getWidth();
119
        int h = theImage.getHeight();
120
        BufferedImage newImage = new BufferedImage(width, height, theImage.getType());
121
        Graphics2D g = newImage.createGraphics();
122
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
123
        g.drawImage(theImage, 0, 0, width, height, 0, 0, w, h, null);
124
        g.dispose();
125
        return new SimpleImage(newImage);
126
    }
127

    
128
    public SimpleImage rotate(int angle) {
129
        BufferedImage theImage = this.getBufferedImage();
130
        int w = theImage.getWidth();
131
        int h = theImage.getHeight();
132
        BufferedImage newImage = new BufferedImage(w, h, theImage.getType());
133
        Graphics2D g = newImage.createGraphics();
134
        g.rotate(Math.toRadians(angle), w / 2, h / 2);
135
        g.drawImage(theImage, null, 0, 0);
136
        g.dispose();
137
        return new SimpleImage(newImage);
138
    }
139

    
140
    public SimpleImage horizontalflip() {
141
        BufferedImage img = this.getBufferedImage();
142
        int w = img.getWidth();
143
        int h = img.getHeight();
144
        BufferedImage newImage = new BufferedImage(w, h, img.getType());
145
        Graphics2D g = newImage.createGraphics();
146
        g.drawImage(img, 0, 0, w, h, w, 0, 0, h, null);
147
        g.dispose();
148
        return new SimpleImage(newImage);
149
    }
150

    
151
    public SimpleImage verticalflip() {
152
        BufferedImage img = this.getBufferedImage();
153
        int w = img.getWidth();
154
        int h = img.getHeight();
155
        BufferedImage newImage = new BufferedImage(w, h, img.getColorModel().getTransparency());
156
        Graphics2D g = newImage.createGraphics();
157
        g.drawImage(img, 0, 0, w, h, 0, h, w, 0, null);
158
        g.dispose();
159
        return new SimpleImage(newImage);
160
    }
161

    
162
    public SimpleImage transform(AffineTransform transform, int width, int height) {
163
        BufferedImage img = this.getBufferedImage();
164
        BufferedImage newImage = new BufferedImage(width, height, img.getColorModel().getTransparency());
165
        Graphics2D g = newImage.createGraphics();
166
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
167
        g.setTransform(transform);
168
        g.drawImage(img, 0, 0, null);
169
        g.dispose();
170
        return new SimpleImage(newImage);
171
    }
172

    
173
    public SimpleImage transform(AffineTransform transform) {
174
        BufferedImage img = this.getBufferedImage();
175
        int w = img.getWidth();
176
        int h = img.getHeight();
177
        BufferedImage newImage = new BufferedImage(w, h, img.getColorModel().getTransparency());
178
        Graphics2D g = newImage.createGraphics();
179
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
180
        g.setTransform(transform);
181
        g.drawImage(img, 0, 0, null);
182
        g.dispose();
183
        return new SimpleImage(newImage);
184
    }
185
    
186
}