Revision 12899

View differences:

trunk/libraries/libRaster/src-test/org/gvsig/raster/dataset/io/TestGdalWriter.java
34 34
import org.gvsig.raster.dataset.Params;
35 35
import org.gvsig.raster.dataset.RasterDataset;
36 36
import org.gvsig.raster.dataset.RasterDriverException;
37
import org.gvsig.raster.datastruct.Extent;
38 37

  
39 38
/**
40 39
 * Test para salvar un raster a tif variando sus par?metros.
trunk/libraries/libRaster/src-test/org/gvsig/raster/buffer/TestBufferInterpolation.java
39 39
import org.gvsig.raster.dataset.Params;
40 40
import org.gvsig.raster.dataset.RasterDataset;
41 41
import org.gvsig.raster.dataset.RasterDriverException;
42
import org.gvsig.raster.datastruct.Extent;
43 42

  
44 43
/**
45 44
 * Test para probar las interpolaciones de un buffer de datos completo. El test crear? un 
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/io/JpegWriter.java
33 33
import org.gvsig.raster.dataset.Params;
34 34
import org.gvsig.raster.dataset.io.features.JpegFeatures;
35 35
import org.gvsig.raster.dataset.io.features.WriteFileFormatFeatures;
36
import org.gvsig.raster.datastruct.Extent;
37 36
import org.gvsig.raster.util.RasterUtilities;
38 37
import org.gvsig.raster.util.extensionPoints.ExtensionPoints;
39 38
import org.gvsig.raster.util.extensionPoints.ExtensionPointsSingleton;
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/io/GdalWriter.java
39 39
import org.gvsig.raster.dataset.io.features.PNM_PpmFeatures;
40 40
import org.gvsig.raster.dataset.io.features.RMFFeatures;
41 41
import org.gvsig.raster.dataset.io.features.WriteFileFormatFeatures;
42
import org.gvsig.raster.datastruct.Extent;
43 42
import org.gvsig.raster.util.RasterUtilities;
44 43
import org.gvsig.raster.util.extensionPoints.ExtensionPoints;
45 44
import org.gvsig.raster.util.extensionPoints.ExtensionPointsSingleton;
trunk/libraries/libRaster/src/org/gvsig/raster/dataset/GeoRasterWriter.java
30 30

  
31 31
import org.cresques.cts.IProjection;
32 32
import org.gvsig.raster.dataset.io.features.WriteFileFormatFeatures;
33
import org.gvsig.raster.datastruct.Extent;
34 33
import org.gvsig.raster.util.RasterUtilities;
35 34
import org.gvsig.raster.util.extensionPoints.ExtensionPoint;
36 35
import org.gvsig.raster.util.extensionPoints.ExtensionPoints;
trunk/libraries/libRaster/src/org/gvsig/raster/grid/render/Rendering.java
99 99

  
100 100

  
101 101
	private IBuffer                 lastRenderBuffer = null;
102
	
102

  
103 103
	/**
104 104
	 * Ancho y alto del objeto Image en una petici?n de dibujado a un raster raster
105 105
	 */
106 106
	private double					widthImage, heightImage;
107
	
107

  
108 108
	private Point2D                 ulPxRequest, lrPxRequest;
109 109

  
110 110
	/**
......
197 197
		geoImage = null;
198 198
		MultiRasterDataset dataset = bufferFactory.getMultiRasterDataset();
199 199
		AffineTransform transf = dataset.getAffineTransform();
200
		
200

  
201 201
		if(RasterUtilities.isOutside(vp.getExtent(), dataset.getExtent()))
202 202
			return;
203
		
203

  
204 204
		Extent adjustedRotedRequest = request(vp, dataset);
205 205

  
206 206
		if ((widthImage <= 0) || (heightImage <= 0))
207 207
			return;
208
		
208

  
209 209
		int[] step = null;
210 210

  
211 211
		if (bufferFactory != null) {
......
241 241
			grid.applyFilters();
242 242
		} catch (InterruptedException e1) {
243 243
		}
244
		
244

  
245 245
		// Objeto con la info de paleta
246 246
		lastRenderBuffer = grid.getRasterBuf();
247 247
		drawer.setBuffer(lastRenderBuffer); // Buffer de datos a renderizar
......
251 251
		drawer.setBufferSize((int)Math.round(widthImage), (int)Math.round(heightImage)); // Ancho y alto del buffer
252 252
		drawer.setPixelsToDrawSize(bufferFactory.getNWidth(), bufferFactory.getNHeight()); // Ancho y alto del buffer
253 253
		geoImage = drawer.drawBufferOverImageObject(replicateBand, getRenderBands()); // Acci?n de renderizado
254
		
255
		//En el caso de no tenga rotaci?n y el tama?o de pixel sea positivo en X y negativo en Y no aplicamos ninguna 
256
		//transformaci?n. Esto no es necesario hacerlo, sin ello se visualiza igual. Unicamente se hace porque de esta 
254

  
255
		//En el caso de no tenga rotaci?n y el tama?o de pixel sea positivo en X y negativo en Y no aplicamos ninguna
256
		//transformaci?n. Esto no es necesario hacerlo, sin ello se visualiza igual. Unicamente se hace porque de esta
257 257
		//forma el raster resultante mejora un poco en calidad en ciertos niveles de zoom ya que al aplicar transformaciones
258 258
		//sobre el Graphics parece que pierde algo de calidad.
259 259
		if(transf.getScaleX() > 0 && transf.getScaleY() < 0 && transf.getShearX() == 0 && transf.getShearY() == 0) {
......
262 262
			g.drawImage(geoImage, (int) Math.round(pt.getX()), (int) Math.round(pt.getY()), null);
263 263
			return;
264 264
		}
265
		
265

  
266 266
		/*
267 267
		 * Tenemos una matriz con la transformaci?n de la coordenadas de la vista a coordenadas reales vp.mat, adem?s tenemos
268 268
		 * la transformaci?n de coordenadas reales a coordenadas pixel (transf). Con ambas podemos obtener una matriz de trasformacion
269 269
		 * entre coordenadas de la vista a coordenadas pixel (transf X vp.mat). As? obtenemos la transformaci?n entre coordenadas
270 270
		 * de la vista y coordenadas pixel del raster. El problemas es que cada zoom la escala de la petici?n del raster varia
271
		 * por lo que habr? que calcular una matriz con la escala (escale). escale X transf X vp.mat 
271
		 * por lo que habr? que calcular una matriz con la escala (escale). escale X transf X vp.mat
272 272
		 */
273 273
		double sX = Math.abs(ulPxRequest.getX() - lrPxRequest.getX()) / widthImage;
274 274
		double sY = Math.abs(ulPxRequest.getY() - lrPxRequest.getY()) / heightImage;
275 275
		AffineTransform escale = new AffineTransform(sX, 0, 0, sY, 0, 0);
276
				
276

  
277 277
		try {
278 278
			AffineTransform at = (AffineTransform)escale.clone();
279 279
			at.preConcatenate(transf);
......
281 281
			g.transform(at);
282 282
			Point2D.Double pt = null;
283 283
			//El punto sobre el que rota la imagen depende del signo de los tama?os del pixel
284
			if(transf.getScaleX() < 0 && transf.getScaleY() < 0) 
284
			if(transf.getScaleX() < 0 && transf.getScaleY() < 0)
285 285
				pt = new Point2D.Double(adjustedRotedRequest.maxX(), adjustedRotedRequest.maxY());
286
			else if(transf.getScaleX() > 0 && transf.getScaleY() > 0) 
286
			else if(transf.getScaleX() > 0 && transf.getScaleY() > 0)
287 287
				pt = new Point2D.Double(adjustedRotedRequest.minX(), adjustedRotedRequest.minY());
288
			else if(transf.getScaleX() < 0 && transf.getScaleY() > 0) 
288
			else if(transf.getScaleX() < 0 && transf.getScaleY() > 0)
289 289
				pt = new Point2D.Double(adjustedRotedRequest.maxX(), adjustedRotedRequest.minY());
290 290
			else
291 291
				pt = new Point2D.Double(adjustedRotedRequest.getULX(), adjustedRotedRequest.getULY());
292 292
			vp.getMat().transform(pt, pt);
293
			at.inverseTransform(pt, pt);	
293
			at.inverseTransform(pt, pt);
294 294
			g.drawImage(geoImage, (int) Math.round(pt.getX()), (int) Math.round(pt.getY()), null);
295 295
			g.transform(at.createInverse());
296 296
		} catch (NoninvertibleTransformException e) {
297 297
			e.printStackTrace();
298 298
		}
299
		
299

  
300 300
		// long t2 = new Date().getTime();
301 301
		// System.out.println("Renderizando Raster: " + ((t2 - t1) / 1000D) + ", secs.");
302 302
	}
303
	
303

  
304 304
	/**
305 305
	 * Calculamos la petici?n en coordenadas del mundo real con la transformaci?n del raster. Esto
306 306
	 * permite obtener las coordenadas de la petici?n con la rotaci?n, si la tiene.
......
310 310
	 */
311 311
	private Extent request(ViewPortData vp, MultiRasterDataset dataset) {
312 312
		if (dataset.isRotated()) {
313
			//Obtenemos las cuatro esquinas de la selecci?n que hemos hecho en la vista 
313
			//Obtenemos las cuatro esquinas de la selecci?n que hemos hecho en la vista
314 314
			Point2D ul = new Point2D.Double(vp.getExtent().minX(), vp.getExtent().maxY());
315 315
			Point2D ur = new Point2D.Double(vp.getExtent().maxX(), vp.getExtent().maxY());
316 316
			Point2D ll = new Point2D.Double(vp.getExtent().minX(), vp.getExtent().minY());
......
327 327
			double pxMaxY = Math.max(Math.max(ul.getY(), ur.getY()), Math.max(ll.getY(), lr.getY()));
328 328
			double pxMinX = Math.min(Math.min(ul.getX(), ur.getX()), Math.min(ll.getX(), lr.getX()));
329 329
			double pxMinY = Math.min(Math.min(ul.getY(), ur.getY()), Math.min(ll.getY(), lr.getY()));
330
			
330

  
331 331
			//Ajustamos las coordenadas pixel al ?rea m?xima del raster
332 332
			pxMinX = Math.max(pxMinX, 0);
333 333
			pxMinY = Math.max(pxMinY, 0);
334 334
			pxMaxX = Math.min(pxMaxX, dataset.getWidth()[0]);
335 335
			pxMaxY = Math.min(pxMaxY, dataset.getHeight()[0]);
336
			
336

  
337 337
			//Petici?n en coordenadas pixel
338 338
			ulPxRequest = new Point2D.Double(pxMinX, pxMinY);
339 339
			lrPxRequest = new Point2D.Double(pxMaxX, pxMaxY);
340
			
340

  
341 341
			//Calculamos el ancho y alto del buffer sobre el que se escribe la petici?n
342 342
			widthImage = ((Math.abs(lrPxRequest.getX() - ulPxRequest.getX()) * vp.getWidth()) / Math.abs(ul.getX() - ur.getX()));
343 343
			heightImage = ((Math.abs(lrPxRequest.getY() - ulPxRequest.getY()) * vp.getHeight()) / Math.abs(ur.getY() - lr.getY()));
......
360 360
		lrPxRequest = new Point2D.Double(lr.getX(), lr.getY());
361 361
		return adjustedRotedExtent;
362 362
	}
363
	
363

  
364 364
	/**
365 365
	 * Obtiene el n?mero de bandas y el orden de renderizado. Cada posici?n del
366 366
	 * vector es una banda del buffer y el contenido de esa posici?n es la banda
......
475 475
	 * @return true si tiene tabla de color y false si no la tiene.
476 476
	 */
477 477
	public boolean existColorTable() {
478
			return (grid.getPalettes() != null && grid.getPalettes()[0] != null);
478
			return (grid != null && grid.getPalettes() != null && grid.getPalettes()[0] != null);
479 479
	}
480

  
481
	public Grid getGrid() {
482
		return grid;
483
	}
480 484
}
trunk/libraries/libRaster/src/org/gvsig/raster/grid/filter/pansharp/PanSharpeningListManager.java
2 2

  
3 3
import java.util.ArrayList;
4 4

  
5
import org.gvsig.raster.dataset.IBuffer;
6 5
import org.gvsig.raster.dataset.Params;
7 6
import org.gvsig.raster.grid.filter.IRasterFilterListManager;
8 7
import org.gvsig.raster.grid.filter.RasterFilter;
trunk/libraries/libRaster/src/org/gvsig/raster/buffer/cache/CacheDataServer.java
41 41
import org.gvsig.raster.dataset.Params;
42 42
import org.gvsig.raster.dataset.RasterDataset;
43 43
import org.gvsig.raster.dataset.RasterDriverException;
44
import org.gvsig.raster.datastruct.Extent;
45 44

  
46 45

  
47 46
/** 
trunk/libraries/libRaster/src/org/gvsig/raster/datastruct/ColorTable.java
429 429
	 * @return
430 430
	 */
431 431
	private Color interpolatedColor(double value, int pos) {
432
		if (colorItems.size() <= 0)
433
			return Color.black;
434

  
432 435
		if ((pos + 1) == colorItems.size())
433 436
			return ((ColorItem) colorItems.get(pos)).getColor();
434 437

  
438
		if (value <= ((ColorItem) colorItems.get(0)).getValue())
439
			return ((ColorItem) colorItems.get(0)).getColor();
440

  
435 441
		ColorItem item1 = (ColorItem) colorItems.get(pos);
436 442
		ColorItem item2 = (ColorItem) colorItems.get(pos + 1);
437 443

  
......
561 567
				color = interpolatedColor(value, pos);
562 568
			} else {
563 569
				if ((pos + 1) < colorItems.size()) {
564
					if ((((ColorItem) colorItems.get(pos)).getValue() + ((ColorItem) colorItems.get(pos + 1)).getValue()) / 2 < value)
570
					double min2 = ((ColorItem) colorItems.get(pos)).getValue();
571
					double max2 = ((ColorItem) colorItems.get(pos + 1)).getValue();
572
					if ((min2 + ((max2 - min2) * ((ColorItem) colorItems.get(pos + 1)).getInterpolated() / 100)) < value)
565 573
						pos++;
566 574
				}
567 575
				color = ((ColorItem) colorItems.get(pos)).getColor();
trunk/libraries/libRaster/src/org/gvsig/raster/datastruct/serializer/ColorTableLibraryPersistence.java
165 165
			fileInputStream.close();
166 166

  
167 167
			// Cambiar nombre a antiguo fichero
168
			palettesFile.renameTo(new File(palettesBasePath + File.separator + "palettes.xml~"));
168
			palettesFile.renameTo(new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml~"));
169 169
			return;
170 170

  
171 171
		} catch (FileNotFoundException fnfEx) {

Also available in: Unified diff