Revision 1735 branches/CqCMSDvp/libraries/libCq CMS for java.old/src/org/cresques/io/MrSidFile.java

View differences:

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