Revision 1735 branches/CqCMSDvp/libraries/libCq CMS for java.old/src/org/cresques/io/MrSidFile.java
MrSidFile.java | ||
---|---|---|
80 | 80 |
public int nbands; |
81 | 81 |
int noverviews; |
82 | 82 |
public int xini,yini,anchoOver, altoOver; |
83 |
public int blocksize = 1; |
|
83 | 84 |
|
84 | 85 |
|
85 | 86 |
public MrSidNative(String fName) throws MrSIDException, IOException { |
... | ... | |
101 | 102 |
nbands = this.getNumBands(); |
102 | 103 |
eColorSpace = this.getColorSpace(); |
103 | 104 |
noverviews = this.getNumLevels(); |
104 |
|
|
105 |
|
|
105 | 106 |
metadata = this.getMetadata(); |
106 | 107 |
double ox=0D, oy=0D, resx=0D, resy=0D; |
107 | 108 |
|
... | ... | |
118 | 119 |
esq.add(new Point2D.Double(ox+resx*width, oy)); |
119 | 120 |
esq.add(new Point2D.Double(ox, oy+resy*height)); |
120 | 121 |
esq.add(new Point2D.Double(ox+resx*width, oy+resy*height)); |
122 |
|
|
123 |
blocksize = this.getStripHeight(); |
|
124 |
System.out.println("StripHeight = ("+blocksize+")"); |
|
121 | 125 |
|
122 | 126 |
} |
123 | 127 |
|
... | ... | |
155 | 159 |
|
156 | 160 |
Point2D tl = worldToRaster(new Point2D.Double(dWorldTLX, dWorldTLY)); |
157 | 161 |
Point2D br = worldToRaster(new Point2D.Double(dWorldBRX, dWorldBRY)); |
158 |
System.out.println("2========>"+tl.getX()+","+tl.getY()+","+br.getX()+","+br.getY()+","+width+","+height); |
|
162 |
//System.out.println("2========>"+tl.getX()+","+tl.getY()+","+br.getX()+","+br.getY()+","+width+","+height);
|
|
159 | 163 |
|
160 | 164 |
//Ancho y alto de la im?gen (pixeles en pantalla) |
161 | 165 |
currentViewWidth = nWidth; |
... | ... | |
165 | 169 |
currentViewY = tl.getY(); |
166 | 170 |
|
167 | 171 |
viewportScale = (double) currentViewWidth/(br.getX()-tl.getX()); |
168 |
System.out.println("2.4========>"+currentViewWidth+","+br.getX()+" "+tl.getX()+" "+viewportScale); |
|
172 |
//System.out.println("2.4========>"+currentViewWidth+","+br.getX()+" "+tl.getX()+" "+viewportScale);
|
|
169 | 173 |
currentViewY = tl.getY(); |
170 | 174 |
try { |
171 | 175 |
// calcula el overview a usar |
... | ... | |
179 | 183 |
for (int i=(noverviews-1); i>0; i--) { |
180 | 184 |
zoom = LTIUtils.levelToMag(i); |
181 | 185 |
dims=this.getDimsAtMag(zoom); |
182 |
System.out.println("2.5========>"+viewportScale+", dims="+dims[0]+","+dims[1]+ |
|
183 |
" zoom="+zoom+" this.getWidth()"+this.getWidth()+"\nviewportScale"+viewportScale); |
|
186 |
//System.out.println("2.5========>"+viewportScale+", dims="+dims[0]+","+dims[1]+
|
|
187 |
//" zoom="+zoom+" this.getWidth()"+this.getWidth()+"\nviewportScale"+viewportScale);
|
|
184 | 188 |
if (dims[0]>this.getWidth()*viewportScale) { |
185 | 189 |
currentOverview = i; |
186 |
System.out.println("2.6========>OVERVIEW SELECC="+i+" zoom="+zoom+" dims="+dims[0]+","+dims[1]); |
|
190 |
//System.out.println("2.6========>OVERVIEW SELECC="+i+" zoom="+zoom+" dims="+dims[0]+","+dims[1]);
|
|
187 | 191 |
zoomoverview=zoom; |
188 | 192 |
viewportScale /= zoomoverview; |
189 | 193 |
currentFullWidth = dims[0]; |
... | ... | |
277 | 281 |
|
278 | 282 |
if(SceneWidth==0)SceneWidth=1; |
279 | 283 |
if(SceneHeight==0)SceneHeight=1; |
280 |
System.out.println("2.9========>ColorSpace="+eColorSpace+" nbands="+nbands+" eSampleType="+eSampleType); |
|
284 |
//System.out.println("2.9========>ColorSpace="+eColorSpace+" nbands="+nbands+" eSampleType="+eSampleType);
|
|
281 | 285 |
if(pixel==null)pixel = new LTIPixel(eColorSpace, nbands, eSampleType); |
282 | 286 |
LTIScene scene = new LTIScene(x, y, SceneWidth, SceneHeight, zoomoverview); |
283 | 287 |
// Este deber?a ser el constructor con ventana |
284 | 288 |
LTISceneBuffer buffer = new LTISceneBuffer(pixel, SceneWidth, SceneHeight, true); |
285 |
System.out.println("3========>currentViewX/Y=("+currentViewX+","+currentViewY+ |
|
289 |
/*System.out.println("3========>currentViewX/Y=("+currentViewX+","+currentViewY+
|
|
286 | 290 |
")\n\t currentView Size=("+currentViewWidth+","+currentViewHeight+ |
287 | 291 |
")\n\t currentScene Size=("+SceneWidth+","+SceneHeight+ |
288 | 292 |
")\n\t (x,y)=("+x+","+y+") CurrentFull=("+currentFullWidth+","+currentFullHeight+ |
289 | 293 |
")\n\t AnchoAlto=("+this.getWidth()+","+this.getHeight()+ |
290 | 294 |
")\n\t Buff-length="+buffer.buf1.length+" zoom="+zoomoverview + |
291 |
")\n\t viewportscale="+viewportScale); |
|
295 |
")\n\t viewportscale="+viewportScale);*/
|
|
292 | 296 |
((LTIImageStage)this).read(scene, buffer); |
293 | 297 |
|
294 | 298 |
|
... | ... | |
324 | 328 |
} |
325 | 329 |
|
326 | 330 |
if(eColorSpace==LTIColorSpace.LTI_COLORSPACE_GRAYSCALE) |
327 |
for(k=0;k<buffer.size;k++) |
|
328 |
line[k]=buffer.buf1[k]; |
|
331 |
for (int y1=0; y1<currentViewHeight; y1++) |
|
332 |
for (int x1=0; x1<currentViewWidth; x1++) { |
|
333 |
kd = y1*currentViewWidth+x1; |
|
334 |
k = ((int) (y1*scale))*SceneWidth+ (int)(((double) x1)*scale); |
|
335 |
try { |
|
336 |
line[kd] = alpha + bandR[k]; |
|
337 |
} catch (java.lang.ArrayIndexOutOfBoundsException e) { |
|
338 |
} |
|
339 |
} |
|
340 |
|
|
329 | 341 |
|
330 | 342 |
} else if (dataType == LTIDataType.LTI_DATATYPE_FLOAT32 || |
331 | 343 |
dataType == LTIDataType.LTI_DATATYPE_FLOAT32) { |
... | ... | |
338 | 350 |
|
339 | 351 |
return 0; |
340 | 352 |
} |
353 |
|
|
354 |
/** |
|
355 |
* Lee una ventana de la imagen y devuelve un buffer de bytes |
|
356 |
* @param ulX |
|
357 |
* @param ulY |
|
358 |
* @param sizeX |
|
359 |
* @param sizeY |
|
360 |
* @param band |
|
361 |
* @return |
|
362 |
* @throws MrSIDException |
|
363 |
*/ |
|
364 |
public byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band)throws MrSIDException{ |
|
365 |
|
|
366 |
if(pixel==null)pixel = new LTIPixel(eColorSpace, nbands, eSampleType); |
|
367 |
|
|
368 |
LTIScene scene=new LTIScene(ulX, ulY, sizeX, sizeY, 1.0); |
|
369 |
LTISceneBuffer buffer=new LTISceneBuffer(pixel, sizeX, sizeY, true); |
|
370 |
((LTIImageStage)this).read(scene,buffer); |
|
371 |
if(band==1)return buffer.buf1; |
|
372 |
else if(band==2)return buffer.buf2; |
|
373 |
else if(band==3)return buffer.buf3; |
|
374 |
return null; |
|
375 |
} |
|
376 |
|
|
377 |
|
|
378 |
|
|
341 | 379 |
} |
342 | 380 |
|
343 | 381 |
public class MrSidFile extends GeoRasterFile { |
... | ... | |
420 | 458 |
// Set the view |
421 | 459 |
|
422 | 460 |
file.setView(v.minX(), v.maxY(), v.maxX(), v.minY(),width, height); |
423 |
System.out.println("1========>"+v.minX()+","+ v.maxY()+","+v.maxX()+","+v.minY()+","+width+","+height); |
|
461 |
//System.out.println("1========>"+v.minX()+","+ v.maxY()+","+v.maxX()+","+v.minY()+","+width+","+height);
|
|
424 | 462 |
|
425 | 463 |
//Impedimos que los valores de ancho y alto de la im?gen sean menores que 1 |
426 | 464 |
|
... | ... | |
432 | 470 |
pRGBArray = new int[width*height]; |
433 | 471 |
|
434 | 472 |
try { |
435 |
System.out.println("1.5========>"+width+","+height); |
|
473 |
//System.out.println("1.5========>"+width+","+height);
|
|
436 | 474 |
file.setAlpha(getAlpha()); |
437 | 475 |
setBand(RED_BAND, rBandNr); |
438 | 476 |
setBand(GREEN_BAND, gBandNr); |
... | ... | |
452 | 490 |
|
453 | 491 |
private void showOnOpen() { |
454 | 492 |
// Report en la apertura (quitar) |
455 |
System.out.println("Fichero GDAL '"+getName()+"' abierto.");
|
|
493 |
System.out.println("Fichero MrSID '"+getName()+"' abierto.");
|
|
456 | 494 |
System.out.println("Version = "+file.version); |
457 | 495 |
System.out.println(" Size = ("+file.width+","+file.height+")"); |
458 | 496 |
System.out.println(" NumBands = ("+file.nbands+")"); |
... | ... | |
477 | 515 |
// TODO Auto-generated method stub |
478 | 516 |
return null; |
479 | 517 |
} |
518 |
|
|
519 |
/** |
|
520 |
* Devuelve los datos de una ventana solicitada |
|
521 |
* @param ulX coordenada X superior izda. |
|
522 |
* @param ulY coordenada Y superior derecha. |
|
523 |
* @param sizeX tama?o en X de la ventana. |
|
524 |
* @param sizeY tama?o en Y de la ventana. |
|
525 |
* @param band Banda solicitada. |
|
526 |
*/ |
|
527 |
public byte[] getWindow(int ulX, int ulY, int sizeX, int sizeY, int band){ |
|
528 |
try{ |
|
529 |
return file.getWindow(ulX, ulY, sizeX, sizeY, band); |
|
530 |
}catch(MrSIDException e){ |
|
531 |
e.printStackTrace(); |
|
532 |
} |
|
533 |
return null; |
|
534 |
} |
|
535 |
|
|
536 |
|
|
537 |
/** |
|
538 |
* Devuelve el tama?o de bloque |
|
539 |
* @return Tama?o de bloque |
|
540 |
*/ |
|
541 |
public int getBlockSize(){ |
|
542 |
//TODO Nacho: Implementar getBlockSize de EcwFile |
|
543 |
return file.blocksize; |
|
544 |
} |
|
480 | 545 |
} |
481 | 546 |
|
482 | 547 |
|
Also available in: Unified diff