gvsig-raster / org.gvsig.raster.ermapper / trunk / org.gvsig.raster.ermapper / org.gvsig.raster.ermapper.jni / src / main / java / com / ermapper / ecw / JNCSRenderer.java @ 2449
History | View | Annotate | Download (14.3 KB)
1 | 2449 | nbrodin | // Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
|
---|---|---|---|
2 | // Jad home page: http://www.kpdus.com/jad.html
|
||
3 | // Decompiler options: packimports(3)
|
||
4 | // Source File Name: JNCSRenderer.java
|
||
5 | |||
6 | package com.ermapper.ecw; |
||
7 | |||
8 | import com.ermapper.util.JNCSDatasetPoint; |
||
9 | import com.ermapper.util.JNCSWorldPoint; |
||
10 | import java.awt.*; |
||
11 | import java.awt.image.*; |
||
12 | import java.io.PrintStream; |
||
13 | import java.util.StringTokenizer; |
||
14 | |||
15 | // Referenced classes of package com.ermapper.ecw:
|
||
16 | // JNCSFile, JNCSException, JNCSFileOpenFailedException, JNCSFileNotOpenException,
|
||
17 | // JNCSInvalidSetViewException, JNCSProgressiveUpdate
|
||
18 | |||
19 | public class JNCSRenderer extends JNCSFile |
||
20 | { |
||
21 | |||
22 | public JNCSRenderer()
|
||
23 | throws JNCSException
|
||
24 | { |
||
25 | pRGBArray = null;
|
||
26 | outputDeviceCoords = new double[4]; |
||
27 | ecwImage = null;
|
||
28 | prevImageSizeX = -1;
|
||
29 | prevImageSizeY = -1;
|
||
30 | bHaveValidSetView = false;
|
||
31 | transparencyValue = 1.0F;
|
||
32 | alphaComposite = null;
|
||
33 | memImSource = null;
|
||
34 | } |
||
35 | |||
36 | public JNCSRenderer(String s, boolean flag) |
||
37 | throws JNCSFileOpenFailedException, JNCSException
|
||
38 | { |
||
39 | pRGBArray = null;
|
||
40 | outputDeviceCoords = new double[4]; |
||
41 | ecwImage = null;
|
||
42 | prevImageSizeX = -1;
|
||
43 | prevImageSizeY = -1;
|
||
44 | bHaveValidSetView = false;
|
||
45 | transparencyValue = 1.0F;
|
||
46 | alphaComposite = null;
|
||
47 | memImSource = null;
|
||
48 | open(s, flag); |
||
49 | } |
||
50 | |||
51 | public void setTransparency(float f) |
||
52 | { |
||
53 | transparencyValue = f; |
||
54 | if(bHave1_2VM)
|
||
55 | alphaComposite = AlphaComposite.getInstance(3, transparencyValue); |
||
56 | } |
||
57 | |||
58 | public int setView(int i, int ai[], int j, int k, int l, int i1, int j1, |
||
59 | int k1)
|
||
60 | throws JNCSFileNotOpenException, JNCSInvalidSetViewException
|
||
61 | { |
||
62 | int l1 = j;
|
||
63 | int i2 = k;
|
||
64 | int j2 = l;
|
||
65 | int k2 = i1;
|
||
66 | if(j < 0) |
||
67 | l1 = 0;
|
||
68 | if(k < 0) |
||
69 | i2 = 0;
|
||
70 | if(l > super.width - 1) |
||
71 | j2 = super.width - 1; |
||
72 | if(i1 > super.height - 1) |
||
73 | k2 = super.height - 1; |
||
74 | int l2 = (int)Math.round(((double)(l1 - j) / (double)(l - j)) * (double)j1); |
||
75 | int i3 = (int)Math.round(((double)(i2 - k) / (double)(i1 - k)) * (double)k1); |
||
76 | int j3 = (int)Math.round(((double)(j2 - j) / (double)(l - j)) * (double)j1); |
||
77 | int k3 = (int)Math.round(((double)(k2 - k) / (double)(i1 - k)) * (double)k1); |
||
78 | super.setView(i, ai, l1, i2, j2, k2, j3 - l2, k3 - i3);
|
||
79 | bHaveValidSetView = true;
|
||
80 | if(!super.progressive) |
||
81 | { |
||
82 | dRendererSetViewDatasetTLX = l1; |
||
83 | dRendererSetViewDatasetTLY = l1; |
||
84 | dRendererSetViewDatasetBRX = j2; |
||
85 | dRendererSetViewDatasetBRY = k2; |
||
86 | dRendererSetViewWidth = j3 - l2; |
||
87 | dRendererSetViewHeight = k3 - i3; |
||
88 | } |
||
89 | return 0; |
||
90 | } |
||
91 | |||
92 | public int setView(int i, int ai[], double d, double d1, double d2, double d3, int j, int k) |
||
93 | throws JNCSFileNotOpenException, JNCSInvalidSetViewException
|
||
94 | { |
||
95 | JNCSDatasetPoint jncsdatasetpoint = convertWorldToDataset(d, d1); |
||
96 | JNCSDatasetPoint jncsdatasetpoint1 = convertWorldToDataset(d2, d3); |
||
97 | double d4 = d;
|
||
98 | double d5 = d1;
|
||
99 | double d6 = d2;
|
||
100 | double d7 = d3;
|
||
101 | jncsdatasetpoint.x = (int)Math.floor((d4 - super.originX) / super.cellIncrementX); |
||
102 | jncsdatasetpoint.y = (int)Math.floor((d5 - super.originY) / super.cellIncrementY); |
||
103 | jncsdatasetpoint1.x = (int)Math.ceil((d6 - super.originX) / super.cellIncrementX); |
||
104 | jncsdatasetpoint1.y = (int)Math.ceil((d7 - super.originY) / super.cellIncrementY); |
||
105 | JNCSWorldPoint jncsworldpoint = convertDatasetToWorld(jncsdatasetpoint.x, jncsdatasetpoint.y); |
||
106 | JNCSWorldPoint jncsworldpoint1 = convertDatasetToWorld(jncsdatasetpoint1.x, jncsdatasetpoint1.y); |
||
107 | d4 = jncsworldpoint.x; |
||
108 | d5 = jncsworldpoint.y; |
||
109 | d6 = jncsworldpoint1.x; |
||
110 | d7 = jncsworldpoint1.y; |
||
111 | if(jncsdatasetpoint.x < 0) |
||
112 | d4 = super.originX;
|
||
113 | if(jncsdatasetpoint.y < 0) |
||
114 | d5 = super.originY;
|
||
115 | if(jncsdatasetpoint1.x > super.width - 1) |
||
116 | d6 = super.originX + (double)(super.width - 1) * super.cellIncrementX; |
||
117 | if(jncsdatasetpoint1.y > super.height - 1) |
||
118 | d7 = super.originY + (double)(super.height - 1) * super.cellIncrementY; |
||
119 | if(jncsdatasetpoint.x < 0 && jncsdatasetpoint1.x < 0 || jncsdatasetpoint.x > super.width - 1 && jncsdatasetpoint1.x > super.width - 1) |
||
120 | { |
||
121 | bHaveValidSetView = false;
|
||
122 | return 1; |
||
123 | } |
||
124 | if(jncsdatasetpoint.y < 0 && jncsdatasetpoint1.y < 0 || jncsdatasetpoint.y > super.height - 1 && jncsdatasetpoint1.y > super.height - 1) |
||
125 | { |
||
126 | bHaveValidSetView = false;
|
||
127 | return 1; |
||
128 | } |
||
129 | int l = (int)Math.round(((d4 - d) / (d2 - d)) * (double)j); |
||
130 | int i1 = (int)Math.round(((d5 - d1) / (d3 - d1)) * (double)k); |
||
131 | int j1 = (int)Math.round(((d6 - d) / (d2 - d)) * (double)j); |
||
132 | int k1 = (int)Math.round(((d7 - d1) / (d3 - d1)) * (double)k); |
||
133 | if(j1 - l > jncsdatasetpoint1.x - jncsdatasetpoint.x)
|
||
134 | { |
||
135 | j1 = jncsdatasetpoint1.x; |
||
136 | l = jncsdatasetpoint.x; |
||
137 | } |
||
138 | if(k1 - i1 > jncsdatasetpoint1.y - jncsdatasetpoint.y)
|
||
139 | { |
||
140 | k1 = jncsdatasetpoint1.y; |
||
141 | i1 = jncsdatasetpoint.y; |
||
142 | } |
||
143 | if(j1 - l < 1 || k1 - i1 < 1) |
||
144 | { |
||
145 | bHaveValidSetView = false;
|
||
146 | return 1; |
||
147 | } |
||
148 | super.setView(i, ai, d4, d5, d6, d7, j1 - l, k1 - i1);
|
||
149 | bHaveValidSetView = true;
|
||
150 | if(!super.progressive) |
||
151 | { |
||
152 | dRendererSetViewWorldTLX = d4; |
||
153 | dRendererSetViewWorldTLY = d5; |
||
154 | dRendererSetViewWorldBRX = d6; |
||
155 | dRendererSetViewWorldBRY = d7; |
||
156 | dRendererSetViewWidth = j1 - l; |
||
157 | dRendererSetViewHeight = k1 - i1; |
||
158 | } |
||
159 | return 0; |
||
160 | } |
||
161 | |||
162 | public void refreshUpdate(int i, int j, double d, double d1, double d2, double d3) |
||
163 | { |
||
164 | ecwReadImage(i, j, d, d1, d2, d3); |
||
165 | if(super.progImageClient != null) |
||
166 | super.progImageClient.refreshUpdate(i, j, d, d1, d2, d3);
|
||
167 | } |
||
168 | |||
169 | public void refreshUpdate(int i, int j, int k, int l, double d, int i1) |
||
170 | { |
||
171 | ecwReadImage(i, j, k, l, d, i1); |
||
172 | if(super.progImageClient != null) |
||
173 | super.progImageClient.refreshUpdate(i, j, k, l, d, i1);
|
||
174 | } |
||
175 | |||
176 | private boolean ecwReadImage(int i, int j, double d, double d1, double d2, double d3) |
||
177 | { |
||
178 | Image image = null; |
||
179 | boolean flag = false; |
||
180 | if(prevImageSizeX != i || prevImageSizeY != j)
|
||
181 | { |
||
182 | pRGBArray = new int[i * j]; |
||
183 | prevImageSizeX = i; |
||
184 | prevImageSizeY = j; |
||
185 | flag = true;
|
||
186 | } |
||
187 | try
|
||
188 | { |
||
189 | readImageRGBA(pRGBArray, i, j); |
||
190 | if(flag)
|
||
191 | { |
||
192 | memImSource = null;
|
||
193 | memImSource = new MemoryImageSource(i, j, ecwColorModel, pRGBArray, 0, i); |
||
194 | } else
|
||
195 | { |
||
196 | memImSource.newPixels(pRGBArray, ecwColorModel, 0, i);
|
||
197 | } |
||
198 | } |
||
199 | catch(JNCSException jncsexception)
|
||
200 | { |
||
201 | System.out.print(String.valueOf(String.valueOf((new StringBuffer("readImageRGBA failed :")).append(jncsexception.toString()).append("\n")))); |
||
202 | bHaveValidSetView = false;
|
||
203 | boolean flag1 = false; |
||
204 | return flag1;
|
||
205 | } |
||
206 | image = Toolkit.getDefaultToolkit().createImage(memImSource);
|
||
207 | if(ecwImage == null) |
||
208 | { |
||
209 | ecwImage = image; |
||
210 | dRendererWorldTLX = d; |
||
211 | dRendererWorldTLY = d1; |
||
212 | dRendererWorldBRX = d2; |
||
213 | dRendererWorldBRY = d3; |
||
214 | } else
|
||
215 | { |
||
216 | synchronized(ecwImage)
|
||
217 | { |
||
218 | ecwImage = image; |
||
219 | dRendererWorldTLX = d; |
||
220 | dRendererWorldTLY = d1; |
||
221 | dRendererWorldBRX = d2; |
||
222 | dRendererWorldBRY = d3; |
||
223 | } |
||
224 | } |
||
225 | bHaveValidSetView = false;
|
||
226 | return true; |
||
227 | } |
||
228 | |||
229 | public void drawImage(Graphics g, int i, int j, int k, int l, double d, |
||
230 | double d1, double d2, double d3, ImageObserver imageobserver) |
||
231 | { |
||
232 | if(!super.progressive && bHaveValidSetView) |
||
233 | ecwReadImage(dRendererSetViewWidth, dRendererSetViewHeight, dRendererSetViewWorldTLX, dRendererSetViewWorldTLY, dRendererSetViewWorldBRX, dRendererSetViewWorldBRY); |
||
234 | if(super.progressive && ecwImage == null) |
||
235 | return;
|
||
236 | synchronized(ecwImage)
|
||
237 | { |
||
238 | if(bHave1_2VM)
|
||
239 | if((double)transparencyValue == 1.0D); |
||
240 | calculateDeviceCoords(i, j, i + k, j + l, d, d1, d2, d3, outputDeviceCoords); |
||
241 | int i1 = (int)Math.round(outputDeviceCoords[2] - outputDeviceCoords[0]); |
||
242 | int j1 = (int)Math.round(outputDeviceCoords[3] - outputDeviceCoords[1]); |
||
243 | int k1 = ecwImage.getWidth(imageobserver);
|
||
244 | int l1 = ecwImage.getHeight(imageobserver);
|
||
245 | if(i1 != k1 || j1 != l1)
|
||
246 | { |
||
247 | if(i1 > k1 && j1 > l1)
|
||
248 | { |
||
249 | double d4 = outputDeviceCoords[0] >= (double)i ? outputDeviceCoords[0] : i; |
||
250 | double d5 = outputDeviceCoords[1] >= (double)j ? outputDeviceCoords[1] : j; |
||
251 | double d6 = outputDeviceCoords[2] <= (double)(i + k) ? outputDeviceCoords[2] : i + k; |
||
252 | double d7 = outputDeviceCoords[3] <= (double)(j + l) ? outputDeviceCoords[3] : j + l; |
||
253 | double ad[] = calculateImageCoords(outputDeviceCoords[0], outputDeviceCoords[1], outputDeviceCoords[2], outputDeviceCoords[3], k1, l1, d4, d5, d6, d7); |
||
254 | ad[0] = Math.floor(ad[0]); |
||
255 | ad[1] = Math.floor(ad[1]); |
||
256 | ad[2] = Math.ceil(ad[2]); |
||
257 | ad[3] = Math.ceil(ad[3]); |
||
258 | double d8 = dRendererWorldTLX + ((dRendererWorldBRX - dRendererWorldTLX) / (double)k1) * ad[0]; |
||
259 | double d9 = dRendererWorldTLY + ((dRendererWorldBRY - dRendererWorldTLY) / (double)l1) * ad[1]; |
||
260 | double d10 = dRendererWorldTLX + ((dRendererWorldBRX - dRendererWorldTLX) / (double)k1) * ad[2]; |
||
261 | double d11 = dRendererWorldTLY + ((dRendererWorldBRY - dRendererWorldTLY) / (double)l1) * ad[3]; |
||
262 | double d12 = ((outputDeviceCoords[2] - outputDeviceCoords[0]) * (d8 - dRendererWorldTLX)) / (dRendererWorldBRX - dRendererWorldTLX) + outputDeviceCoords[0]; |
||
263 | double d13 = ((outputDeviceCoords[3] - outputDeviceCoords[1]) * (d9 - dRendererWorldTLY)) / (dRendererWorldBRY - dRendererWorldTLY) + outputDeviceCoords[1]; |
||
264 | double d14 = ((outputDeviceCoords[2] - outputDeviceCoords[0]) * (d10 - dRendererWorldTLX)) / (dRendererWorldBRX - dRendererWorldTLX) + outputDeviceCoords[0]; |
||
265 | double d15 = ((outputDeviceCoords[3] - outputDeviceCoords[1]) * (d11 - dRendererWorldTLY)) / (dRendererWorldBRY - dRendererWorldTLY) + outputDeviceCoords[1]; |
||
266 | g.drawImage(ecwImage, (int)Math.round(d12), (int)Math.round(d13), (int)Math.round(d14), (int)Math.round(d15), (int)Math.floor(ad[0]), (int)Math.floor(ad[1]), (int)Math.ceil(ad[2]), (int)Math.ceil(ad[3]), imageobserver); |
||
267 | } else
|
||
268 | { |
||
269 | g.drawImage(ecwImage, (int)Math.round(outputDeviceCoords[0]), (int)Math.round(outputDeviceCoords[1]), (int)Math.round(outputDeviceCoords[2]), (int)Math.round(outputDeviceCoords[3]), 0, 0, k1, l1, imageobserver); |
||
270 | } |
||
271 | } else
|
||
272 | { |
||
273 | g.drawImage(ecwImage, (int)Math.round(outputDeviceCoords[0]), (int)Math.round(outputDeviceCoords[1]), imageobserver); |
||
274 | } |
||
275 | if(bHave1_2VM)
|
||
276 | if((double)transparencyValue == 1.0D); |
||
277 | } |
||
278 | } |
||
279 | |||
280 | private static final double[] calculateImageCoords(double d, double d1, double d2, double d3, |
||
281 | double d4, double d5, double d6, double d7, double d8, double d9) |
||
282 | { |
||
283 | double ad[] = new double[4]; |
||
284 | double d10 = ((d8 - d6) * d4) / (d2 - d);
|
||
285 | double d11 = ((d9 - d7) * d5) / (d3 - d1);
|
||
286 | ad[0] = ((d6 - d) * d10) / (d8 - d6);
|
||
287 | ad[1] = ((d7 - d1) * d11) / (d9 - d7);
|
||
288 | ad[2] = ad[0] + d10; |
||
289 | ad[3] = ad[1] + d11; |
||
290 | return ad;
|
||
291 | } |
||
292 | |||
293 | private final void calculateDeviceCoords(int i, int j, int k, int l, double d, double d1, double d2, double d3, double ad[]) |
||
294 | { |
||
295 | ad[0] = ((dRendererWorldTLX - d) / (d2 - d)) * (double)(k - i); |
||
296 | ad[1] = ((dRendererWorldTLY - d1) / (d3 - d1)) * (double)(l - j); |
||
297 | ad[2] = ((dRendererWorldBRX - d) / (d2 - d)) * (double)(k - i); |
||
298 | ad[3] = ((dRendererWorldBRY - d1) / (d3 - d1)) * (double)(l - j); |
||
299 | } |
||
300 | |||
301 | private final void convertImageToWorld(int i, int j, double d, double d1, double ad[]) |
||
302 | { |
||
303 | ad[0] = dRendererWorldTLX + ((dRendererWorldBRX - dRendererWorldTLX) / (double)i) * d; |
||
304 | ad[1] = dRendererWorldTLY + ((dRendererWorldBRY - dRendererWorldTLY) / (double)j) * d1; |
||
305 | } |
||
306 | |||
307 | private double dRendererSetViewWorldTLX; |
||
308 | private double dRendererSetViewWorldTLY; |
||
309 | private double dRendererSetViewWorldBRX; |
||
310 | private double dRendererSetViewWorldBRY; |
||
311 | private int dRendererSetViewDatasetTLX; |
||
312 | private int dRendererSetViewDatasetTLY; |
||
313 | private int dRendererSetViewDatasetBRX; |
||
314 | private int dRendererSetViewDatasetBRY; |
||
315 | private int dRendererSetViewWidth; |
||
316 | private int dRendererSetViewHeight; |
||
317 | private int pRGBArray[]; |
||
318 | private double outputDeviceCoords[]; |
||
319 | private double dRendererWorldTLX; |
||
320 | private double dRendererWorldTLY; |
||
321 | private double dRendererWorldBRX; |
||
322 | private double dRendererWorldBRY; |
||
323 | private Image ecwImage; |
||
324 | private int prevImageSizeX; |
||
325 | private int prevImageSizeY; |
||
326 | private boolean bHaveValidSetView; |
||
327 | private float transparencyValue; |
||
328 | private AlphaComposite alphaComposite; |
||
329 | private static boolean bHave1_2VM = false; |
||
330 | private MemoryImageSource memImSource; |
||
331 | private static DirectColorModel ecwColorModel = null; |
||
332 | private static final boolean bOptimizeImageStretch = true; |
||
333 | |||
334 | static
|
||
335 | { |
||
336 | String s = System.getProperty("java.version"); |
||
337 | StringTokenizer stringtokenizer = new StringTokenizer(s, "."); |
||
338 | int i = Integer.parseInt(stringtokenizer.nextToken()); |
||
339 | int j = Integer.parseInt(stringtokenizer.nextToken()); |
||
340 | if(i >= 1 && j >= 2) |
||
341 | bHave1_2VM = true;
|
||
342 | ecwColorModel = new DirectColorModel(32, 0xff0000, 65280, 255); |
||
343 | } |
||
344 | } |