1 package de.desy.video.sw;
2
3 import java.awt.Graphics;
4 import java.awt.Image;
5 import java.awt.image.BufferedImage;
6 import java.awt.Transparency;
7
8 import javax.swing.ImageIcon;
9 import java.awt.GraphicsConfiguration;
10 import java.awt.GraphicsDevice;
11 import java.awt.GraphicsEnvironment;
12 import java.awt.HeadlessException;
13
14 import java.io.*;
15 import javax.imageio.*;
16 import java.text.DateFormat;
17 import java.text.SimpleDateFormat;
18
19
20
21
22 import de.desy.tine.types.*;
23
24
25
26
27
28
29
30
31
32
33
34
35 public final class CBasicPNGWriterV3 {
36
37
38
39
40
41 private static BufferedImage toBufferedImage(Image image)
42 {
43 if (image instanceof BufferedImage)
44 {
45 return (BufferedImage)image;
46 }
47
48
49 image = new ImageIcon(image).getImage();
50
51
52
53 boolean hasAlpha = false;
54
55
56 BufferedImage bimage = null;
57 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
58
59 try
60 {
61
62 int transparency = Transparency.OPAQUE;
63 if (hasAlpha)
64 {
65 transparency = Transparency.BITMASK;
66 }
67
68
69 GraphicsDevice gs = ge.getDefaultScreenDevice();
70 GraphicsConfiguration gc = gs.getDefaultConfiguration();
71 bimage = gc.createCompatibleImage(
72 image.getWidth(null), image.getHeight(null), transparency);
73 }
74 catch (HeadlessException e)
75 {
76
77 }
78
79 if (bimage == null)
80 {
81
82 int type = BufferedImage.TYPE_INT_RGB;
83 if (hasAlpha)
84 {
85 type = BufferedImage.TYPE_INT_ARGB;
86 }
87 bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
88 }
89
90
91 Graphics g = bimage.createGraphics();
92
93
94 g.drawImage(image, 0, 0, null);
95 g.dispose();
96
97 return bimage;
98 }
99
100
101
102
103
104
105 public static boolean write( String aFileName, Image aImg, CVideoHeader3 aHdr)
106 {
107 return write(new File(aFileName), aImg, aHdr);
108 }
109
110
111
112
113
114
115
116
117
118
119
120
121 public static boolean write( File aFile, Image aImg, CVideoHeader3 aHdr)
122 {
123 try
124 {
125 ImageIO.write(toBufferedImage(aImg), "png", aFile);
126
127
128
129 String wholename = aFile.getAbsolutePath();
130 wholename += ".txt";
131
132 Writer output = null;
133 try {
134
135
136 File txtF = new File(wholename);
137 txtF.createNewFile();
138
139 String n = System.getProperty("line.separator");
140 DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
141
142 output = new BufferedWriter( new FileWriter(txtF) );
143
144 IMAGE.SourceHeader srcH = aHdr.sourceHeader;
145 IMAGE.FrameHeader frmH = aHdr.frameHeader;
146
147 output.write("SourceHeader."+n);
148 output.write(" .version "+srcH.versionTag+n);
149 output.write(" .timestamp "+dfmt.format(aHdr.getTimestampAsDate())+n);
150 output.write(" .cameraport \""+srcH.cameraPortName+"\""+n);
151 output.write(" .total_length "+srcH.totalLength+n);
152
153 output.write(" FrameHeader"+n);
154 output.write(" .sourceWidth "+frmH.sourceWidth+n);
155 output.write(" .sourceHeight "+frmH.sourceHeight+n);
156 output.write(" .aoiWidth "+frmH.aoiWidth+n);
157 output.write(" .aoiHeight "+frmH.aoiHeight+n);
158 output.write(" .xStart "+frmH.xStart+n);
159 output.write(" .yStart "+frmH.yStart+n);
160 output.write(" .bytesPerPixel "+frmH.bytesPerPixel+n);
161 output.write(" .effectiveBitsPerPixel "+frmH.effectiveBitsPerPixel+n);
162 output.write(" .horizontalBinning "+frmH.horizontalBinning+n);
163 output.write(" .verticalBinning "+frmH.verticalBinning+n);
164 output.write(" .sourceFormat "+CVideoHeader3.formatToString(frmH.sourceFormat)+n);
165 output.write(" .currentFormat "+CVideoHeader3.formatToString(frmH.imageFormat)+n);
166 output.write(" .frameNumber "+frmH.frameNumber+n);
167 output.write(" .eventNumer "+frmH.eventNumber+n);
168 output.write(" .xScale "+frmH.xScale+n);
169 output.write(" .yScale "+frmH.yScale+n);
170 output.write(" .imageRotation "+frmH.imageRotation+n);
171 output.write(" .imageFlags "+CVideoHeader3.flagsToString(frmH.imageFlags)+n);
172 output.write(" .appendedFrameSize "+frmH.appendedFrameSize+n);
173 output.write("Header END"+n);
174 }
175 catch( IOException ex1 )
176 {
177 return false;
178 }
179 finally
180 {
181
182 if (output != null) output.close();
183 }
184
185 }
186 catch( IOException ex )
187 {
188 return false;
189 }
190
191 return true;
192 }
193
194 }