Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/demo/share/jfc/J2Ddemo/java2d/demos/Images/JPEGFlip.java
41175 views
1
/*
2
*
3
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
*
9
* - Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
*
12
* - Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* - Neither the name of Oracle nor the names of its
17
* contributors may be used to endorse or promote products derived
18
* from this software without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
package java2d.demos.Images;
33
34
35
import static java.awt.Color.BLACK;
36
import static java.awt.Color.GREEN;
37
import static java.awt.Color.RED;
38
import static java.awt.Color.WHITE;
39
import java.awt.Font;
40
import java.awt.Graphics2D;
41
import java.awt.Image;
42
import java.awt.geom.GeneralPath;
43
import java.awt.geom.Path2D;
44
import java.awt.image.BufferedImage;
45
import java.io.ByteArrayInputStream;
46
import java.io.ByteArrayOutputStream;
47
import java.io.IOException;
48
import java.util.logging.Level;
49
import java.util.logging.Logger;
50
import java2d.Surface;
51
import javax.imageio.IIOImage;
52
import javax.imageio.ImageIO;
53
import javax.imageio.ImageWriteParam;
54
import javax.imageio.ImageWriter;
55
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
56
import javax.imageio.stream.ImageOutputStream;
57
58
59
/**
60
* Render a filled star & duke into a BufferedImage, save the BufferedImage
61
* as a JPEG, display the BufferedImage, using the decoded JPEG BufferedImage
62
* display the JPEG flipped BufferedImage.
63
*/
64
@SuppressWarnings("serial")
65
public class JPEGFlip extends Surface {
66
67
private static Image img;
68
69
public JPEGFlip() {
70
setBackground(WHITE);
71
img = getImage("duke.png");
72
}
73
74
@Override
75
public void render(int w, int h, Graphics2D g2) {
76
77
int hh = h / 2;
78
79
BufferedImage bi = new BufferedImage(w, hh, BufferedImage.TYPE_INT_RGB);
80
Graphics2D big = bi.createGraphics();
81
82
// .. use rendering hints from J2DCanvas ..
83
big.setRenderingHints(g2.getRenderingHints());
84
85
big.setBackground(getBackground());
86
big.clearRect(0, 0, w, hh);
87
88
big.setColor(GREEN.darker());
89
GeneralPath p = new GeneralPath(Path2D.WIND_NON_ZERO);
90
p.moveTo(-w / 2.0f, -hh / 8.0f);
91
p.lineTo(+w / 2.0f, -hh / 8.0f);
92
p.lineTo(-w / 4.0f, +hh / 2.0f);
93
p.lineTo(+0.0f, -hh / 2.0f);
94
p.lineTo(+w / 4.0f, +hh / 2.0f);
95
p.closePath();
96
big.translate(w / 2, hh / 2);
97
big.fill(p);
98
99
float scale = 0.09f;
100
int iw = (int) (scale * w);
101
int ih = (int) (img.getHeight(null) * iw / img.getWidth(null));
102
big.drawImage(img, -iw / 2, -ih / 2, iw, ih, this);
103
104
g2.drawImage(bi, 0, 0, this);
105
g2.setFont(new Font("Dialog", Font.PLAIN, 10));
106
g2.setColor(BLACK);
107
g2.drawString("BufferedImage", 4, 12);
108
109
110
BufferedImage bi1 = null;
111
ImageOutputStream ios = null;
112
// To write the jpeg to a file uncomment the File* lines and
113
// comment out the ByteArray*Stream lines.
114
//FileOutputStream out = null;
115
ByteArrayOutputStream out = null;
116
//FileInputStream in = null;
117
ByteArrayInputStream in = null;
118
try {
119
//File file = new File("images", "test.jpg");
120
//out = new FileOutputStream(file);
121
out = new ByteArrayOutputStream();
122
ios = ImageIO.createImageOutputStream(out);
123
ImageWriter encoder =
124
ImageIO.getImageWritersByFormatName("JPEG").next();
125
JPEGImageWriteParam param = new JPEGImageWriteParam(null);
126
127
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
128
param.setCompressionQuality(1.0f);
129
130
encoder.setOutput(ios);
131
encoder.write(null, new IIOImage(bi, null, null), param);
132
133
//in = new FileInputStream(file);
134
in = new ByteArrayInputStream(out.toByteArray());
135
bi1 = ImageIO.read(in);
136
} catch (Exception ex) {
137
g2.setColor(RED);
138
g2.drawString("Error encoding or decoding the image", 5, hh * 2 - 5);
139
return;
140
} finally {
141
if (ios != null) {
142
try {
143
ios.close();
144
} catch (IOException ex) {
145
Logger.getLogger(JPEGFlip.class.getName()).log(Level.SEVERE,
146
null, ex);
147
}
148
}
149
if (out != null) {
150
try {
151
out.close();
152
} catch (IOException ex) {
153
Logger.getLogger(JPEGFlip.class.getName()).log(Level.SEVERE,
154
null, ex);
155
}
156
}
157
if (in != null) {
158
try {
159
in.close();
160
} catch (IOException ex) {
161
Logger.getLogger(JPEGFlip.class.getName()).log(Level.SEVERE,
162
null, ex);
163
}
164
}
165
}
166
167
if (bi1 == null) {
168
g2.setColor(RED);
169
g2.drawString("Error reading the image", 5, hh * 2 - 5);
170
return;
171
}
172
173
g2.drawImage(bi1, w, hh * 2, -w, -hh, null);
174
175
g2.drawString("JPEGImage Flipped", 4, hh * 2 - 4);
176
g2.drawLine(0, hh, w, hh);
177
}
178
179
public static void main(String[] s) {
180
createDemoFrame(new JPEGFlip());
181
}
182
}
183
184