svn-gvsig-desktop / branches / v05 / libraries / libjni-ecwcompress / src-test / EcwBandasLandsat.java @ 40081
History | View | Annotate | Download (4.67 KB)
1 |
import es.gva.cit.jecwcompress.*; |
---|---|
2 |
import es.gva.cit.jgdal.*; |
3 |
|
4 |
public class EcwBandasLandsat{ |
5 |
|
6 |
public static void Uso(){ |
7 |
System.out.println("Uso 1: Comprime una ventana de la imagen."); |
8 |
System.out.println(" java TifToEcw file-src file-dst compresi?n num_bandas(3 ? 5)"); |
9 |
} |
10 |
|
11 |
public static void main(String[] args){ |
12 |
|
13 |
Gdal[] gdalimgs=null; |
14 |
|
15 |
int nbandas=0; |
16 |
|
17 |
NCSEcwCompressClient client; |
18 |
ReadImgs lectura=null;
|
19 |
String[] images; |
20 |
|
21 |
if(args.length != 3){ |
22 |
EcwBandasLandsat.Uso(); |
23 |
return;
|
24 |
} |
25 |
|
26 |
nbandas = Integer.parseInt(args[2]); |
27 |
if(nbandas!=3 && nbandas!=6){ |
28 |
EcwBandasLandsat.Uso(); |
29 |
return;
|
30 |
} |
31 |
|
32 |
|
33 |
images=new String[nbandas]; |
34 |
gdalimgs =new Gdal[nbandas];
|
35 |
for(int i=0;i<nbandas;i++)gdalimgs[i]=new Gdal(); |
36 |
|
37 |
if(nbandas==6){ |
38 |
for(int i=0;i<nbandas-1;i++) |
39 |
images[i] = new String(args[0]+(i+1)+"0.tif"); |
40 |
images[5] = new String(args[0]+"70.tif"); |
41 |
}else if(nbandas==3){ |
42 |
images[0] = new String(args[0]+"30.tif"); |
43 |
images[1] = new String(args[0]+"20.tif"); |
44 |
images[2] = new String(args[0]+"10.tif"); |
45 |
} |
46 |
|
47 |
try{
|
48 |
for(int i=0;i<nbandas;i++){ |
49 |
gdalimgs[i].open(images[i],Gdal.GA_ReadOnly); |
50 |
System.out.println(images[i]);
|
51 |
} |
52 |
}catch(Exception ge){ |
53 |
ge.printStackTrace(); |
54 |
//...........
|
55 |
} |
56 |
|
57 |
GdalRasterBand mirasterband=null;
|
58 |
String st;
|
59 |
int nxsize=0; |
60 |
int nysize=0; |
61 |
int widthcompress = 0; |
62 |
int heightcompress = 0; |
63 |
int rastercount=nbandas;
|
64 |
String rasterband;
|
65 |
GeoTransform gt=null;
|
66 |
|
67 |
try{
|
68 |
nxsize = gdalimgs[0].getRasterXSize();
|
69 |
nysize = gdalimgs[0].getRasterYSize();
|
70 |
System.out.println("N BANDAS="+rastercount+" SIZEX="+nxsize+" SIZEY="+nysize); |
71 |
}catch(GdalException ge){
|
72 |
ge.printStackTrace(); |
73 |
//...........
|
74 |
} |
75 |
|
76 |
widthcompress = nxsize; |
77 |
heightcompress = nysize; |
78 |
|
79 |
try{
|
80 |
gt = gdalimgs[0].getGeoTransform();
|
81 |
System.out.println("Origins = ("+gt.adfgeotransform[0]+","+gt.adfgeotransform[3]+")"); |
82 |
System.out.println("Pixel Size = ("+gt.adfgeotransform[1]+","+gt.adfgeotransform[5]+")"); |
83 |
}catch(GdalException e){
|
84 |
System.out.println("No puedo obtener el array geoTransform."); |
85 |
e.printStackTrace(); |
86 |
//...........
|
87 |
} |
88 |
|
89 |
try{
|
90 |
client = new NCSEcwCompressClient();
|
91 |
|
92 |
if(nbandas==6)client.setOutputFilename(args[0]+"123457multibanda.ecw"); |
93 |
else if(nbandas==3)client.setOutputFilename(args[0]+"321multibanda.ecw"); |
94 |
client.setInputFilename("");
|
95 |
client.setTargetCompress(Double.parseDouble(args[1])); |
96 |
client.setInOutSizeX(widthcompress); |
97 |
client.setInOutSizeY(heightcompress); |
98 |
client.setInputBands(rastercount); |
99 |
|
100 |
|
101 |
client.setCompressFormat(CompressFormat.COMPRESS_MULTI); |
102 |
|
103 |
|
104 |
client.setCellIncrementX(gt.adfgeotransform[1]);
|
105 |
client.setCellIncrementY(gt.adfgeotransform[5]);
|
106 |
client.setOriginX(gt.adfgeotransform[0]);
|
107 |
client.setOriginY(gt.adfgeotransform[3]);
|
108 |
client.setCellSizeUnits(1);
|
109 |
|
110 |
|
111 |
lectura = new ReadImgs(gdalimgs, client, widthcompress, heightcompress, nbandas);
|
112 |
client.NCSEcwCompressOpen(false);
|
113 |
client.NCSEcwCompress(lectura); |
114 |
client.NCSEcwCompressClose(); |
115 |
|
116 |
}catch(EcwException e){
|
117 |
e.printStackTrace(); |
118 |
//...........
|
119 |
} |
120 |
|
121 |
|
122 |
try{
|
123 |
for(int i=0;i<nbandas;i++)gdalimgs[i].close(); |
124 |
}catch(GdalException e){
|
125 |
e.printStackTrace(); |
126 |
} |
127 |
|
128 |
|
129 |
} |
130 |
} |
131 |
|
132 |
/**
|
133 |
*
|
134 |
* Para la lectura hay que hacer una clase que extienda de JniObject e implemente ReadCallBack
|
135 |
* . Esto obliga a crear un m?todo loadBuffer. En el hay que meter la funcionalidad para que
|
136 |
* llene el buffer. El buffer esta en la clase cliente y tendr? una longitud de
|
137 |
* ancho de una l?nea * n?mero de bandas
|
138 |
*/
|
139 |
|
140 |
class ReadImgs extends JniObject implements ReadCallBack { |
141 |
|
142 |
private GdalBuffer[] buffers; |
143 |
private GdalRasterBand mirasterband=null; |
144 |
private Gdal[] gdalimgs=null; |
145 |
private NCSEcwCompressClient client=null; |
146 |
private int width, height; |
147 |
|
148 |
public ReadImgs(Gdal[] g, NCSEcwCompressClient client, int width, int height, int nbandas){ |
149 |
gdalimgs = g; |
150 |
this.client = client;
|
151 |
this.width = width;
|
152 |
this.height = height;
|
153 |
buffers = new GdalBuffer[nbandas];
|
154 |
|
155 |
} |
156 |
|
157 |
public void loadBuffer(){ |
158 |
|
159 |
try{
|
160 |
for(int iBand=0;iBand<gdalimgs.length;iBand++){ |
161 |
mirasterband=gdalimgs[iBand].getRasterBand(1);
|
162 |
buffers[iBand] = mirasterband.readRaster(0, nNextLine, width, 1, width, 1, 1); |
163 |
for(int pos=0; pos<width; pos++){ |
164 |
client.buffer[pos+(width*iBand)]=buffers[iBand].buffByte[pos]; |
165 |
} |
166 |
} |
167 |
}catch(GdalException e){
|
168 |
System.out.println("Error en la lectura de lineas con Gdal."); |
169 |
System.exit(1); |
170 |
} |
171 |
|
172 |
|
173 |
|
174 |
} |
175 |
|
176 |
public void updatePercent(){ |
177 |
System.out.println(client.getPercent()+"%"); |
178 |
} |
179 |
} |