Revision 127
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/IStatusRaster.java | ||
---|---|---|
26 | 26 |
import org.gvsig.fmap.dal.coverage.exception.FilterTypeException; |
27 | 27 |
import org.gvsig.fmap.dal.coverage.exception.NotSupportedExtensionException; |
28 | 28 |
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException; |
29 |
import org.gvsig.fmap.dal.coverage.grid.GridTransparency; |
|
29 | 30 |
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList; |
30 | 31 |
import org.gvsig.fmap.dal.coverage.store.props.ColorTable; |
31 |
import org.gvsig.raster.impl.grid.GridTransparency; |
|
32 | 32 |
import org.gvsig.tools.persistence.Persistent; |
33 | 33 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
34 | 34 |
import org.gvsig.utils.XMLException; |
... | ... | |
41 | 41 |
* @param xml |
42 | 42 |
* @throws XMLException |
43 | 43 |
*/ |
44 |
//public void loadFromState(PersistentState state, IRasterProperties layer)throws PersistenceException;
|
|
44 |
//public void loadFromState(PersistentState state, FLyrRasterSE layer)throws PersistenceException;
|
|
45 | 45 |
|
46 | 46 |
/** |
47 | 47 |
* Salva en fichero XML algunas propiedades y filtros de raster |
48 | 48 |
* @param xml |
49 | 49 |
* @throws XMLException |
50 | 50 |
*/ |
51 |
public void setStateProperties(boolean loadClass, IRasterProperties layer)throws PersistenceException;
|
|
51 |
public void setStateProperties(boolean loadClass, FLyrRasterSE layer)throws PersistenceException;
|
|
52 | 52 |
|
53 | 53 |
/** |
54 | 54 |
* Aplica el estado almacenado al FLyrRaster pasado por par?metro |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/FLyrRasterSE.java | ||
---|---|---|
38 | 38 |
import java.util.Set; |
39 | 39 |
|
40 | 40 |
import org.cresques.cts.IProjection; |
41 |
import org.geotools.referencing.CRS; |
|
42 | 41 |
import org.gvsig.compat.print.PrintAttributes; |
43 | 42 |
import org.gvsig.fmap.crs.CRSFactory; |
44 | 43 |
import org.gvsig.fmap.dal.DataStore; |
... | ... | |
46 | 45 |
import org.gvsig.fmap.dal.coverage.RasterLocator; |
47 | 46 |
import org.gvsig.fmap.dal.coverage.RasterManager; |
48 | 47 |
import org.gvsig.fmap.dal.coverage.dataset.Buffer; |
48 |
import org.gvsig.fmap.dal.coverage.datastruct.ColorItem; |
|
49 |
import org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary; |
|
49 | 50 |
import org.gvsig.fmap.dal.coverage.datastruct.Extent; |
50 | 51 |
import org.gvsig.fmap.dal.coverage.datastruct.Params; |
51 | 52 |
import org.gvsig.fmap.dal.coverage.datastruct.ViewPortData; |
52 | 53 |
import org.gvsig.fmap.dal.coverage.exception.FileNotFoundInListException; |
53 | 54 |
import org.gvsig.fmap.dal.coverage.exception.FileNotOpenException; |
55 |
import org.gvsig.fmap.dal.coverage.exception.FilterManagerException; |
|
54 | 56 |
import org.gvsig.fmap.dal.coverage.exception.FilterTypeException; |
55 | 57 |
import org.gvsig.fmap.dal.coverage.exception.GridException; |
56 | 58 |
import org.gvsig.fmap.dal.coverage.exception.InvalidSetViewException; |
... | ... | |
76 | 78 |
import org.gvsig.fmap.dal.coverage.store.props.ColorTable; |
77 | 79 |
import org.gvsig.fmap.dal.coverage.store.props.Metadata; |
78 | 80 |
import org.gvsig.fmap.dal.coverage.store.props.Statistics; |
81 |
import org.gvsig.fmap.dal.coverage.util.CRS; |
|
79 | 82 |
import org.gvsig.fmap.dal.coverage.util.ColorConversion; |
80 | 83 |
import org.gvsig.fmap.dal.coverage.util.Historical; |
81 | 84 |
import org.gvsig.fmap.dal.coverage.util.MathUtils; |
... | ... | |
102 | 105 |
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend; |
103 | 106 |
import org.gvsig.fmap.mapcontext.rendering.legend.events.listeners.LegendListener; |
104 | 107 |
import org.gvsig.raster.fmap.legend.ColorTableLegend; |
105 |
import org.gvsig.raster.impl.store.properties.DatasetColorTable; |
|
106 | 108 |
import org.gvsig.raster.util.RasterToolsUtil; |
107 | 109 |
import org.gvsig.tools.ToolsLocator; |
108 | 110 |
import org.gvsig.tools.dynobject.DynStruct; |
... | ... | |
116 | 118 |
import org.slf4j.Logger; |
117 | 119 |
import org.slf4j.LoggerFactory; |
118 | 120 |
|
119 |
|
|
120 |
|
|
121 |
|
|
122 | 121 |
/** |
123 | 122 |
* Capa raster |
124 | 123 |
* @author Nacho Brodin (nachobrodin@gmail.com) |
125 | 124 |
*/ |
126 |
public class FLyrRasterSE extends FLyrDefault implements IRasterProperties, |
|
127 |
InfoByPoint, Classifiable, |
|
125 |
public class FLyrRasterSE extends FLyrDefault implements InfoByPoint, Classifiable, |
|
128 | 126 |
IRasterLayerActions, ILayerState, VisualPropertyListener, SingleLayer { |
129 | 127 |
public static final String PERSISTENT_NAME = "FLyrRasterSE_Persistent"; |
130 | 128 |
public static final String PERSISTENT_DESCRIPTION = "FLyrRasterSE Persistent"; |
... | ... | |
342 | 340 |
|
343 | 341 |
dataStore.resetNoDataValue(); |
344 | 342 |
applyNoData(); |
345 |
GridTransparency gridTransparency = new GridTransparency(dataStore.getTransparencyFilesStatus());
|
|
343 |
GridTransparency gridTransparency = dataStore.getTransparencyFilesStatus().getGridTransparency();
|
|
346 | 344 |
|
347 | 345 |
filterList.setInitDataType(getDataType()[0]); |
348 | 346 |
|
... | ... | |
368 | 366 |
colorTableManager.addFilter(params); |
369 | 367 |
} else //sino hace lo que dice en las preferencias |
370 | 368 |
if (getDataType()[0] != Buffer.TYPE_BYTE) |
371 |
loadEnhancedOrColorTable(filterManager);
|
|
369 |
loadEnhancedOrColorTable(filterList);
|
|
372 | 370 |
loadedFromProject = null; |
373 | 371 |
|
374 | 372 |
getRender().setFilterList(filterList); |
... | ... | |
377 | 375 |
} catch (FilterTypeException e) { |
378 | 376 |
//Ha habido un error en la asignaci?n de filtros por los que no se a?ade ninguno. |
379 | 377 |
RasterToolsUtil.debug("Error a?adiendo filtros en la inicializaci?n de capa " + this.getName() + " Datatype=" + this.getDataType(), null, e); |
378 |
} catch (FilterManagerException e) { |
|
379 |
//Ha habido un error en la asignaci?n de filtros por los que no se a?ade ninguno. |
|
380 |
RasterToolsUtil.debug("Error a?adiendo filtros en la inicializaci?n de capa " + this.getName() + " Datatype=" + this.getDataType(), null, e); |
|
380 | 381 |
} |
381 | 382 |
} |
382 | 383 |
|
... | ... | |
386 | 387 |
* @param filterManager |
387 | 388 |
* @throws FilterTypeException |
388 | 389 |
*/ |
389 |
private void loadEnhancedOrColorTable(RasterFilterListManager filterManager) throws FilterTypeException {
|
|
390 |
private void loadEnhancedOrColorTable(RasterFilterList filterList) throws FilterTypeException, FilterManagerException {
|
|
390 | 391 |
String colorTableName = configuration.getValueString("loadlayer_usecolortable", (String) null); |
391 | 392 |
|
392 | 393 |
String palettesPath = System.getProperty("user.home") + |
393 |
File.separator +
|
|
394 |
"gvSIG" + // PluginServices.getArguments()[0] +
|
|
395 |
File.separator + "colortable";
|
|
394 |
File.separator + |
|
395 |
"gvSIG" + // PluginServices.getArguments()[0] + |
|
396 |
File.separator + "colortable"; |
|
396 | 397 |
|
397 | 398 |
Statistics stats = dataStore.getStatistics(); |
399 |
ColorTableLibrary colorTableLibrary = rManager.getColorTableLibrary(); |
|
398 | 400 |
|
399 | 401 |
if (colorTableName != null) |
400 | 402 |
try { |
401 | 403 |
stats.calculate(); |
402 | 404 |
if (getBandCount() == 1) { |
403 |
ArrayList fileList = ColorTableLibraryPersistence.getPaletteFileList(palettesPath);
|
|
405 |
ArrayList<String> fileList = colorTableLibrary.getPaletteFileList(palettesPath);
|
|
404 | 406 |
for (int i = 0; i < fileList.size(); i++) { |
405 |
ArrayList paletteItems = new ArrayList();
|
|
406 |
String paletteName = ColorTableLibraryPersistence.loadPalette(palettesPath, (String) fileList.get(i), paletteItems);
|
|
407 |
ArrayList<ColorItem> paletteItems = new ArrayList<ColorItem>();
|
|
408 |
String paletteName = colorTableLibrary.loadPalette(palettesPath, (String) fileList.get(i), paletteItems);
|
|
407 | 409 |
if (paletteName.equals(colorTableName)) { |
408 | 410 |
if (paletteItems.size() <= 0) |
409 | 411 |
continue; |
410 | 412 |
|
411 |
ColorTable colorTable = rManager.createColorTable();
|
|
413 |
ColorTable colorTable = colorTableLibrary.createColorTable();
|
|
412 | 414 |
colorTable.setName(paletteName); |
413 | 415 |
colorTable.createPaletteFromColorItems(paletteItems, true); |
414 | 416 |
colorTable.setInterpolated(true); |
415 | 417 |
|
416 | 418 |
colorTable.createColorTableInRange(stats.getMinimun(), stats.getMaximun(), true); |
417 | 419 |
|
418 |
GridPalette p = new GridPalette(colorTable); |
|
419 |
setLastLegend(p); |
|
420 |
setLastLegend(colorTable); |
|
420 | 421 |
|
421 |
ColorTableListManager ctm = new ColorTableListManager(filterManager); |
|
422 |
ctm.addColorTableFilter(p); |
|
422 |
RasterFilterListManager colorTableManager = filterList.getManagerByID("ColorTable"); |
|
423 |
Params params = filterList.getEmptyFilterParams(); |
|
424 |
params.setParam("colorTable", colorTable); |
|
425 |
colorTableManager.addFilter(params); |
|
423 | 426 |
return; |
424 | 427 |
} |
425 | 428 |
} |
... | ... | |
428 | 431 |
// No podemos aplicar el filtro |
429 | 432 |
} catch (RasterDriverException e) { |
430 | 433 |
// No podemos aplicar el filtro |
431 |
} catch (InterruptedException e) { |
|
434 |
} catch (ProcessInterruptedException e) {
|
|
432 | 435 |
// El usuario ha cancelado el proceso |
433 | 436 |
} |
434 | 437 |
|
435 |
/*EnhancementListManager elm = new EnhancementListManager(filterManager); |
|
436 |
elm.addEnhancedFilter(false, stats, 0.0, getRender().getRenderBands());*/ |
|
437 |
|
|
438 |
EnhancementStretchListManager elm = new EnhancementStretchListManager(filterManager); |
|
439 |
try { |
|
440 |
elm.addEnhancedStretchFilter(LinearStretchParams.createStandardParam(getRenderBands(), 0.0, stats, false), |
|
441 |
stats, |
|
442 |
getRender().getRenderBands(), |
|
443 |
false); |
|
444 |
} catch (FileNotOpenException e) { |
|
445 |
//No podemos aplicar el filtro |
|
446 |
} catch (RasterDriverException e) { |
|
447 |
//No podemos aplicar el filtro |
|
448 |
} |
|
438 |
RasterFilterListManager enhancementManager = filterList.getManagerByID("EnhancementStretch"); |
|
439 |
Params params = filterList.getEmptyFilterParams(); |
|
440 |
params.setParam("stats", stats); |
|
441 |
params.setParam("remove", new Boolean(false)); |
|
442 |
params.setParam("renderBands", getRender().getRenderBands()); |
|
443 |
params.setParam("stretchs", null);//coge el LinearStretchParams por defecto |
|
444 |
enhancementManager.addFilter(params); |
|
449 | 445 |
} |
450 | 446 |
|
451 | 447 |
/** |
... | ... | |
1310 | 1306 |
|
1311 | 1307 |
/* |
1312 | 1308 |
* (non-Javadoc) |
1313 |
* @see org.gvsig.fmap.raster.IRasterRendering#getRenderFilterList() |
|
1314 |
*/ |
|
1315 |
public RasterFilterList getRenderFilterList() { |
|
1316 |
return getRender().getFilterList(); |
|
1317 |
} |
|
1318 |
|
|
1319 |
/* |
|
1320 |
* (non-Javadoc) |
|
1321 |
* @see org.gvsig.raster.hierarchy.IRasterRendering#getRenderBands() |
|
1322 |
*/ |
|
1323 |
public int[] getRenderBands() { |
|
1324 |
return getRender().getRenderBands(); |
|
1325 |
} |
|
1326 |
|
|
1327 |
/* |
|
1328 |
* (non-Javadoc) |
|
1329 |
* @see org.gvsig.raster.hierarchy.IRasterRendering#setRenderBands(int[]) |
|
1330 |
*/ |
|
1331 |
public void setRenderBands(int[] renderBands) { |
|
1332 |
getRender().setRenderBands(renderBands); |
|
1333 |
} |
|
1334 |
|
|
1335 |
/* |
|
1336 |
* (non-Javadoc) |
|
1337 | 1309 |
* @see org.gvsig.raster.hierarchy.IRasterRendering#setRenderFilterList(org.gvsig.raster.grid.filter.RasterFilterList) |
1338 | 1310 |
*/ |
1339 | 1311 |
public void setRenderFilterList(RasterFilterList filterList) { |
... | ... | |
1820 | 1792 |
* devolver? null. |
1821 | 1793 |
* @return TreeMap con la lista de capas a dibujar |
1822 | 1794 |
*/ |
1823 |
public HashMap getRasterStrategy() { |
|
1795 |
public HashMap<FLyrRasterSE, Boolean> getRasterStrategy() {
|
|
1824 | 1796 |
if(strategy != null) |
1825 | 1797 |
return strategy.getStrategy(); |
1826 | 1798 |
return null; |
... | ... | |
1897 | 1869 |
* @return |
1898 | 1870 |
*/ |
1899 | 1871 |
public boolean isRenderingAsGray() { |
1900 |
int[] renderBands = getRenderBands(); |
|
1872 |
int[] renderBands = getRender().getRenderBands();
|
|
1901 | 1873 |
if ((renderBands != null) && (renderBands.length == 3) && (renderBands[0] >= 0) && |
1902 | 1874 |
(renderBands[0] == renderBands[1]) && (renderBands[1] == renderBands[2])) |
1903 | 1875 |
return true; |
... | ... | |
1942 | 1914 |
ArrayList<RasterFilter> filters = getRender().getFilterList().getStatusCloned(); |
1943 | 1915 |
|
1944 | 1916 |
//Hacemos una copia de las bandas a renderizar |
1945 |
if(getRenderBands() != null) { |
|
1946 |
int[] rb = new int[getRenderBands().length]; |
|
1917 |
if(getRender().getRenderBands() != null) {
|
|
1918 |
int[] rb = new int[getRender().getRenderBands().length];
|
|
1947 | 1919 |
for (int i = 0; i < rb.length; i++) |
1948 |
rb[i] = getRenderBands()[i]; |
|
1949 |
newLayer.setRenderBands(rb); |
|
1920 |
rb[i] = getRender().getRenderBands()[i];
|
|
1921 |
newLayer.getRender().setRenderBands(rb);
|
|
1950 | 1922 |
} |
1951 | 1923 |
|
1952 | 1924 |
//Asignamos el entorno |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/RasterDrawStrategy.java | ||
---|---|---|
25 | 25 |
import java.util.HashMap; |
26 | 26 |
|
27 | 27 |
import org.gvsig.fmap.dal.coverage.datastruct.Extent; |
28 |
import org.gvsig.fmap.dal.coverage.grid.RasterFilter;
|
|
28 |
import org.gvsig.fmap.dal.coverage.grid.render.Render;
|
|
29 | 29 |
import org.gvsig.fmap.dal.coverage.util.RasterUtilities; |
30 | 30 |
import org.gvsig.fmap.mapcontext.MapContext; |
31 | 31 |
import org.gvsig.fmap.mapcontext.layers.FLayer; |
... | ... | |
44 | 44 |
/** |
45 | 45 |
* Cada mapContext existente lleva asociadad una estrategia de dibujado |
46 | 46 |
*/ |
47 |
public static HashMap mapContextStrategy = new HashMap(); |
|
47 |
public static HashMap<MapContext, HashMap<FLyrRasterSE, Boolean>> |
|
48 |
mapContextStrategy = new HashMap<MapContext, HashMap<FLyrRasterSE, Boolean>> (); |
|
48 | 49 |
|
49 | 50 |
private MapContext mapContext = null; |
50 | 51 |
private FLyrRasterSE lyrRaster = null; |
... | ... | |
112 | 113 |
if(mapContext == null || lyrRaster == null) |
113 | 114 |
return; |
114 | 115 |
|
115 |
ArrayList listLayers = new ArrayList();
|
|
116 |
ArrayList<FLayer> listLayers = new ArrayList<FLayer>();
|
|
116 | 117 |
FLayers lyrs = mapContext.getLayers(); |
117 | 118 |
listLayers = getLayerList(lyrs, listLayers); |
118 | 119 |
|
119 |
ArrayList extentList = new ArrayList();
|
|
120 |
ArrayList<LayerIntersection> extentList = new ArrayList<LayerIntersection>();
|
|
120 | 121 |
|
121 | 122 |
//Solo la primera capa calcula la estrategia. Las dem?s se la preguntan a esta. |
122 | 123 |
|
... | ... | |
148 | 149 |
return; |
149 | 150 |
} |
150 | 151 |
|
151 |
HashMap layersToPaint = new HashMap();
|
|
152 |
HashMap<FLyrRasterSE, Boolean> layersToPaint = new HashMap<FLyrRasterSE, Boolean>();
|
|
152 | 153 |
|
153 | 154 |
//Calculo de estrategia. Solo llega aqu? la primera capa. |
154 | 155 |
//La lista de capas en FLayers est? en orden inverso a lo que aparece en el TOC, es decir, la ?ltima capa |
... | ... | |
161 | 162 |
|
162 | 163 |
FLyrRasterSE rLyr = ((FLyrRasterSE)lyr); |
163 | 164 |
|
164 |
if(rLyr.getRenderFilterList() == null || rLyr.getFullEnvelope() == null) |
|
165 |
if(rLyr.getRender().getFilterList() == null || rLyr.getFullEnvelope() == null)
|
|
165 | 166 |
continue; |
166 | 167 |
|
167 | 168 |
//Si no est? activa y/o visible no se dibuja nunca |
... | ... | |
184 | 185 |
LayerIntersection li = areIntersecting(extentList, rLyr); |
185 | 186 |
if((i == (listLayers.size() - 1)) || li == null) { |
186 | 187 |
boolean colorTableAlpha = false; |
187 |
if(rLyr.getRenderFilterList() != null) { |
|
188 |
RasterFilter rf = rLyr.getRenderFilterList().get("colortable"); |
|
189 |
if(rf != null && rf instanceof ColorTableFilter) |
|
190 |
colorTableAlpha = ((ColorTableFilter)rf).getColorTable().hasAlpha(); |
|
188 |
if(rLyr.getRender().getFilterList() != null) { |
|
189 |
Render render = rLyr.getRender(); |
|
190 |
if(render != null) { |
|
191 |
if(render.getColorTable() != null) |
|
192 |
colorTableAlpha = render.getColorTable().hasAlpha(); |
|
193 |
} |
|
191 | 194 |
} |
192 | 195 |
extentList.add(new LayerIntersection(rLyr.getFullRasterExtent(), (rLyr.existsAlphaBand() || rLyr.isTransparent() || colorTableAlpha))); |
193 | 196 |
layersToPaint.put(rLyr, new Boolean(true)); |
... | ... | |
233 | 236 |
* @param lyr Capa raster |
234 | 237 |
* @return |
235 | 238 |
*/ |
236 |
private LayerIntersection areIntersecting(ArrayList extentList, FLyrRasterSE lyr) { |
|
239 |
private LayerIntersection areIntersecting(ArrayList<LayerIntersection> extentList, FLyrRasterSE lyr) {
|
|
237 | 240 |
for (int i = 0; i < extentList.size(); i++) { |
238 | 241 |
Extent ex = lyr.getFullRasterExtent(); |
239 | 242 |
Extent ex1 = ((LayerIntersection)extentList.get(i)).extent; |
... | ... | |
249 | 252 |
* |
250 | 253 |
* @return TreeMap con la lista de capas a dibujar. |
251 | 254 |
*/ |
252 |
public HashMap getStrategy() { |
|
253 |
return (HashMap)mapContextStrategy.get(mapContext); |
|
255 |
public HashMap<FLyrRasterSE, Boolean> getStrategy() {
|
|
256 |
return (HashMap<FLyrRasterSE, Boolean>)mapContextStrategy.get(mapContext);
|
|
254 | 257 |
} |
255 | 258 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/fmap/layers/StatusLayerRaster.java | ||
---|---|---|
76 | 76 |
|
77 | 77 |
//Filtros para poder montar una nueva pila |
78 | 78 |
public List<String> filters = new ArrayList<String>(); |
79 |
private IRasterProperties layer = null;
|
|
79 |
private FLyrRasterSE layer = null;
|
|
80 | 80 |
private int alphaBandNumber = -1; |
81 | 81 |
|
82 | 82 |
//Utilizado para la persistencia |
... | ... | |
85 | 85 |
/* (non-Javadoc) |
86 | 86 |
* @see com.iver.cit.gvsig.fmap.layers.StatusRasterInterface#setXMLEntity(com.iver.utiles.XMLEntity) |
87 | 87 |
*/ |
88 |
public void loadFromState(PersistentState state, IRasterProperties layer)throws PersistenceException {
|
|
88 |
public void loadFromState(PersistentState state, FLyrRasterSE layer)throws PersistenceException {
|
|
89 | 89 |
// this.layer = layer; |
90 | 90 |
// //RECUPERAR PROPIEDADES |
91 | 91 |
// |
... | ... | |
163 | 163 |
this.alphaBandNumber = state.getInt("alphaBandNumber"); |
164 | 164 |
this.loadClass = state.getBoolean("loadClass"); |
165 | 165 |
|
166 |
this.layer = (IRasterProperties) state.get("layer");
|
|
166 |
this.layer = (FLyrRasterSE)state.get("layer");
|
|
167 | 167 |
|
168 | 168 |
this.ranges = new ArrayList(state.getList("ranges")); |
169 | 169 |
this.files = new ArrayList(state.getList("files")); |
... | ... | |
186 | 186 |
/* (non-Javadoc) |
187 | 187 |
* @see com.iver.cit.gvsig.fmap.layers.StatusRasterInterface#getXMLEntity(com.iver.utiles.XMLEntity) |
188 | 188 |
*/ |
189 |
public void setStateProperties(boolean loadClass, IRasterProperties layer) throws PersistenceException {
|
|
189 |
public void setStateProperties(boolean loadClass, FLyrRasterSE layer) throws PersistenceException {
|
|
190 | 190 |
this.layer = layer; |
191 | 191 |
this.loadClass = loadClass; |
192 | 192 |
} |
... | ... | |
289 | 289 |
*/ |
290 | 290 |
public static void enhancedCompV10(ArrayList<String> filterArguments, FLyrRasterSE layer, RasterFilterListManager filterListManager) throws FilterTypeException { |
291 | 291 |
boolean removed = false; |
292 |
RasterFilterList list = layer.getRenderFilterList(); |
|
292 |
RasterFilterList list = layer.getRender().getFilterList();
|
|
293 | 293 |
for (int i = 0; i < list.lenght(); i++) { |
294 | 294 |
RasterFilter f = list.get(i); |
295 | 295 |
if(f instanceof TailTrimFilter || f instanceof LinearEnhancementFilter) { |
... | ... | |
334 | 334 |
RasterManager rManager = RasterLocator.getManager(); |
335 | 335 |
try { |
336 | 336 |
RasterFilterListManager filterListManager = null; |
337 |
if(layer.getRenderFilterList() != null) |
|
338 |
filterListManager = new RasterFilterListManager(layer.getRenderFilterList()); |
|
337 |
if(layer.getRender().getFilterList() != null)
|
|
338 |
filterListManager = new RasterFilterListManager(layer.getRender().getFilterList());
|
|
339 | 339 |
else { |
340 | 340 |
RasterFilterList fl = new RasterFilterList(); |
341 | 341 |
fl.setInitDataType(Buffer.TYPE_BYTE); |
... | ... | |
353 | 353 |
* @see org.gvsig.fmap.raster.layers.IStatusRaster#getColorTable() |
354 | 354 |
*/ |
355 | 355 |
public ColorTable getColorTable() throws FilterTypeException { |
356 |
RasterFilterList fl = getFilterList(); |
|
357 |
for (int i = 0; i < fl.lenght(); i++) { |
|
358 |
if(fl.get(i) instanceof ColorTableFilter) |
|
359 |
return (ColorTable) fl.get(i).getParam("colorTable"); |
|
360 |
} |
|
361 |
return null; |
|
356 |
return layer.getRender().getColorTable(); |
|
362 | 357 |
} |
363 | 358 |
|
364 | 359 |
/* |
365 | 360 |
* (non-Javadoc) |
366 | 361 |
* @see org.gvsig.fmap.raster.layers.IStatusRaster#getTransparency() |
367 | 362 |
*/ |
368 |
public GridTransparency getTransparency() { |
|
363 |
/*public GridTransparency getTransparency() {
|
|
369 | 364 |
//Asigna la transparencia |
370 | 365 |
GridTransparency transp = new GridTransparency(); |
371 | 366 |
if(transparency != 255) { |
... | ... | |
386 | 381 |
} |
387 | 382 |
|
388 | 383 |
return (transp.isTransparencyActive()) ? transp : null; |
389 |
} |
|
384 |
}*/
|
|
390 | 385 |
|
391 | 386 |
/* |
392 | 387 |
* (non-Javadoc) |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.fmap/src/main/java/org/gvsig/raster/util/LayerVisualStatusList.java | ||
---|---|---|
125 | 125 |
rendering.getFilterList().setStatus(status.filterStatus); |
126 | 126 |
lyr.getRender().setLastTransparency(status.transparency); |
127 | 127 |
if(lyr.isActionEnabled(IRasterLayerActions.REMOTE_ACTIONS)) |
128 |
lyr.getRenderFilterList().setStatus(status.filterStatus); |
|
128 |
lyr.getRender().getFilterList().setStatus(status.filterStatus);
|
|
129 | 129 |
} |
130 | 130 |
} |
131 | 131 |
|
... | ... | |
136 | 136 |
public void getVisualStatus(FLyrRasterSE lyr) { |
137 | 137 |
LayerVisualStatus status = new LayerVisualStatus(); |
138 | 138 |
status.transparency = lyr.getRenderTransparency(); |
139 |
status.filterStatus = lyr.getRenderFilterList().getStatusCloned(); |
|
139 |
status.filterStatus = lyr.getRender().getFilterList().getStatusCloned();
|
|
140 | 140 |
add(status); |
141 | 141 |
} |
142 | 142 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/render/DefaultRender.java | ||
---|---|---|
39 | 39 |
import org.gvsig.fmap.dal.coverage.grid.FilterListChangeListener; |
40 | 40 |
import org.gvsig.fmap.dal.coverage.grid.Grid; |
41 | 41 |
import org.gvsig.fmap.dal.coverage.grid.GridTransparency; |
42 |
import org.gvsig.fmap.dal.coverage.grid.RasterFilter; |
|
42 | 43 |
import org.gvsig.fmap.dal.coverage.grid.RasterFilterList; |
43 | 44 |
import org.gvsig.fmap.dal.coverage.grid.render.Render; |
44 | 45 |
import org.gvsig.fmap.dal.coverage.grid.render.VisualPropertyEvent; |
... | ... | |
46 | 47 |
import org.gvsig.fmap.dal.coverage.store.RasterDataStore; |
47 | 48 |
import org.gvsig.fmap.dal.coverage.store.RasterQuery; |
48 | 49 |
import org.gvsig.fmap.dal.coverage.store.props.ColorInterpretation; |
50 |
import org.gvsig.fmap.dal.coverage.store.props.ColorTable; |
|
49 | 51 |
import org.gvsig.fmap.dal.coverage.util.PropertyEvent; |
50 | 52 |
import org.gvsig.fmap.dal.coverage.util.PropertyListener; |
51 | 53 |
import org.gvsig.fmap.dal.coverage.util.RasterUtilities; |
... | ... | |
544 | 546 |
public boolean existColorTable() { |
545 | 547 |
return (filterList.getFilterByBaseClass(ColorTableFilter.class) != null); |
546 | 548 |
} |
549 |
|
|
550 |
/* |
|
551 |
* (non-Javadoc) |
|
552 |
* @see org.gvsig.fmap.dal.coverage.grid.render.Render#getColorTable() |
|
553 |
*/ |
|
554 |
public ColorTable getColorTable() { |
|
555 |
if(existColorTable()) { |
|
556 |
RasterFilter f = filterList.getFilterByBaseClass(ColorTableFilter.class); |
|
557 |
return ((ColorTableFilter)f).getColorTable(); |
|
558 |
} |
|
559 |
return null; |
|
560 |
} |
|
547 | 561 |
|
548 | 562 |
/** |
549 | 563 |
* Obtiene el grid asociado al render |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/grid/filter/enhancement/EnhancementStretchListManager.java | ||
---|---|---|
123 | 123 |
* @see org.gvsig.fmap.dal.coverage.grid.RasterFilterListManager#addFilter(org.gvsig.fmap.dal.coverage.datastruct.Params) |
124 | 124 |
*/ |
125 | 125 |
public void addFilter(Params params) throws FilterTypeException { |
126 |
//Si stretch vale null se usan los par?metros por defecto de LinearStretchParams |
|
127 |
if(params.getParamById("stretchs").getDefaultValue() == null) { |
|
128 |
int[] rb = (int[])params.getParamById("renderBands").getDefaultValue(); |
|
129 |
Statistics stats = (Statistics)params.getParamById("stats").getDefaultValue(); |
|
130 |
boolean b = ((Boolean)params.getParamById("remove").getDefaultValue()).booleanValue(); |
|
131 |
LinearStretchParams p = null; |
|
132 |
try { |
|
133 |
p = LinearStretchParams.createStandardParam(rb, 0.0, stats, b); |
|
134 |
} catch (FileNotOpenException e) { |
|
135 |
throw new FilterTypeException("", e); |
|
136 |
} catch (RasterDriverException e) { |
|
137 |
throw new FilterTypeException("", e); |
|
138 |
} |
|
139 |
params.setParam("stretchs", p); |
|
140 |
|
|
141 |
} |
|
126 | 142 |
addFilter(LinearStretchEnhancementFilter.class, params); |
127 | 143 |
} |
128 | 144 |
|
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DatasetColorTable.java | ||
---|---|---|
118 | 118 |
this.interpolated = palette.isInterpolated(); |
119 | 119 |
} |
120 | 120 |
|
121 |
/**
|
|
122 |
* Asigna el nombre de la paleta
|
|
123 |
* @param Nombre de la paleta
|
|
121 |
/* |
|
122 |
* (non-Javadoc)
|
|
123 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#setName(java.lang.String)
|
|
124 | 124 |
*/ |
125 | 125 |
public void setName(String name) { |
126 | 126 |
this.name = name; |
127 | 127 |
} |
128 | 128 |
|
129 |
/**
|
|
130 |
* Obtiene el nombre de la paleta
|
|
131 |
* @return Nombre de la paleta
|
|
129 |
/* |
|
130 |
* (non-Javadoc)
|
|
131 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#getName()
|
|
132 | 132 |
*/ |
133 | 133 |
public String getName() { |
134 | 134 |
return name; |
135 | 135 |
} |
136 | 136 |
|
137 |
/** |
|
138 |
* Crea una paleta a traves de una lista de colores y se le puede especificar |
|
139 |
* si queremos que la comprima o no. |
|
140 |
* @param colorItems |
|
141 |
* @param compress |
|
137 |
/* |
|
138 |
* (non-Javadoc) |
|
139 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#createPaletteFromColorItems(java.util.ArrayList, boolean) |
|
142 | 140 |
*/ |
143 | 141 |
public void createPaletteFromColorItems(ArrayList<ColorItem> colorItems, boolean compress) { |
144 | 142 |
this.colorItems = colorItems; |
... | ... | |
260 | 258 |
} |
261 | 259 |
} |
262 | 260 |
|
261 |
/* |
|
262 |
* (non-Javadoc) |
|
263 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#hasAlpha() |
|
264 |
*/ |
|
263 | 265 |
public boolean hasAlpha() { |
264 | 266 |
for (int i = 0; i<colorItems.size(); i++) { |
265 | 267 |
ColorItem colorItem = (ColorItem) colorItems.get(i); |
... | ... | |
350 | 352 |
applyPalette(colorItems); |
351 | 353 |
} |
352 | 354 |
|
353 |
/**
|
|
354 |
* Obtiene la tabla de color por banda
|
|
355 |
* @return Paleta
|
|
355 |
/* |
|
356 |
* (non-Javadoc)
|
|
357 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#getColorTableByBand()
|
|
356 | 358 |
*/ |
357 | 359 |
public byte[][] getColorTableByBand() { |
358 | 360 |
return paletteByBand; |
... | ... | |
511 | 513 |
* abajo. Esto hace que se reduzca la tabla a la mitad de valores haciendo |
512 | 514 |
* solo una comparaci?n. |
513 | 515 |
*/ |
514 |
/** |
|
515 |
* Obtiene el valor RGB para un clave entera pasada por par?metro |
|
516 |
* @param value clave de la cual se quiere obtener el valor RGB de la paleta |
|
517 |
* @return valor RGB |
|
516 |
/* |
|
517 |
* (non-Javadoc) |
|
518 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#getRGBAByBand(double) |
|
518 | 519 |
*/ |
519 | 520 |
public byte[] getRGBAByBand(double value) { |
520 | 521 |
for (int i = 1; i <= range.length; i++) { |
... | ... | |
638 | 639 |
this.range = range; |
639 | 640 |
} |
640 | 641 |
|
641 |
/**
|
|
642 |
* Devuelve un ArrayList con cada ColorItem de la tabla de color
|
|
643 |
* @return
|
|
642 |
/* |
|
643 |
* (non-Javadoc)
|
|
644 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#getColorItems()
|
|
644 | 645 |
*/ |
645 | 646 |
public ArrayList<ColorItem> getColorItems() { |
646 | 647 |
return colorItems; |
647 | 648 |
} |
648 | 649 |
|
649 |
/**
|
|
650 |
* Nos indica si la paleta la ha generado con valores interpolados o no.
|
|
651 |
* @return
|
|
650 |
/* |
|
651 |
* (non-Javadoc)
|
|
652 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#isInterpolated()
|
|
652 | 653 |
*/ |
653 | 654 |
public boolean isInterpolated() { |
654 | 655 |
return interpolated; |
655 | 656 |
} |
656 | 657 |
|
657 |
/**
|
|
658 |
* Definir si la paleta tendra los valores interpolados o no
|
|
659 |
* @param interpolated
|
|
658 |
/* |
|
659 |
* (non-Javadoc)
|
|
660 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#setInterpolated(boolean)
|
|
660 | 661 |
*/ |
661 | 662 |
public void setInterpolated(boolean interpolated) { |
662 | 663 |
this.interpolated = interpolated; |
... | ... | |
842 | 843 |
createPaletteFromColorItems(arrayList, compress); |
843 | 844 |
} |
844 | 845 |
|
845 |
/**
|
|
846 |
* Obtiene el flag de paleta activa o desactivada.
|
|
847 |
* @return true la paleta est? activa y false desactiva
|
|
846 |
/* |
|
847 |
* (non-Javadoc)
|
|
848 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#isPaletteActive()
|
|
848 | 849 |
*/ |
849 | 850 |
public boolean isPaletteActive() { |
850 | 851 |
return paletteActive; |
851 | 852 |
} |
852 | 853 |
|
853 |
/**
|
|
854 |
* Asigna el flag de paleta activa o desactivada.
|
|
855 |
* @param paletteActive true activa la paleta false la desactiva
|
|
854 |
/* |
|
855 |
* (non-Javadoc)
|
|
856 |
* @see org.gvsig.fmap.dal.coverage.store.props.ColorTable#setPaletteActive(boolean)
|
|
856 | 857 |
*/ |
857 | 858 |
public void setPaletteActive(boolean paletteActive) { |
858 | 859 |
this.paletteActive = paletteActive; |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/store/properties/DatasetTransparency.java | ||
---|---|---|
26 | 26 |
import org.gvsig.fmap.dal.coverage.RasterLibrary; |
27 | 27 |
import org.gvsig.fmap.dal.coverage.dataset.Buffer; |
28 | 28 |
import org.gvsig.fmap.dal.coverage.datastruct.TransparencyRange; |
29 |
import org.gvsig.fmap.dal.coverage.grid.GridTransparency; |
|
29 | 30 |
import org.gvsig.fmap.dal.coverage.store.props.Transparency; |
30 | 31 |
import org.gvsig.fmap.dal.coverage.util.PropertyEvent; |
31 | 32 |
import org.gvsig.fmap.dal.coverage.util.PropertyListener; |
32 | 33 |
import org.gvsig.raster.impl.DefaultRasterManager; |
34 |
import org.gvsig.raster.impl.grid.GridTransparencyImpl; |
|
33 | 35 |
import org.gvsig.tools.ToolsLocator; |
34 | 36 |
import org.gvsig.tools.dynobject.DynStruct; |
35 | 37 |
import org.gvsig.tools.persistence.PersistenceManager; |
... | ... | |
498 | 500 |
public void activeTransparency() { |
499 | 501 |
|
500 | 502 |
} |
503 |
|
|
504 |
/* |
|
505 |
* (non-Javadoc) |
|
506 |
* @see org.gvsig.fmap.dal.coverage.store.props.Transparency#getGridTransparency() |
|
507 |
*/ |
|
508 |
public GridTransparency getGridTransparency() { |
|
509 |
return new GridTransparencyImpl(this); |
|
510 |
} |
|
501 | 511 |
|
502 | 512 |
public static void registerPersistent() { |
503 | 513 |
PersistenceManager manager = ToolsLocator.getPersistenceManager(); |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/datastruct/persistence/DefaultColorTableLibrary.java | ||
---|---|---|
1 |
/* gvSIG. Geographic Information System of the Valencian Government |
|
2 |
* |
|
3 |
* Copyright (C) 2007-2008 Infrastructures and Transports Department |
|
4 |
* of the Valencian Government (CIT) |
|
5 |
* |
|
6 |
* This program is free software; you can redistribute it and/or |
|
7 |
* modify it under the terms of the GNU General Public License |
|
8 |
* as published by the Free Software Foundation; either version 2 |
|
9 |
* of the License, or (at your option) any later version. |
|
10 |
* |
|
11 |
* This program is distributed in the hope that it will be useful, |
|
12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
14 |
* GNU General Public License for more details. |
|
15 |
* |
|
16 |
* You should have received a copy of the GNU General Public License |
|
17 |
* along with this program; if not, write to the Free Software |
|
18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
|
19 |
* MA 02110-1301, USA. |
|
20 |
* |
|
21 |
*/ |
|
22 |
package org.gvsig.raster.impl.datastruct.persistence; |
|
23 |
|
|
24 |
import java.awt.Color; |
|
25 |
import java.io.File; |
|
26 |
import java.io.FileInputStream; |
|
27 |
import java.io.FileNotFoundException; |
|
28 |
import java.io.FileOutputStream; |
|
29 |
import java.io.FileWriter; |
|
30 |
import java.io.IOException; |
|
31 |
import java.io.InputStream; |
|
32 |
import java.io.InputStreamReader; |
|
33 |
import java.io.OutputStreamWriter; |
|
34 |
import java.io.StringReader; |
|
35 |
import java.net.URL; |
|
36 |
import java.util.ArrayList; |
|
37 |
|
|
38 |
import org.gvsig.fmap.dal.coverage.datastruct.ColorItem; |
|
39 |
import org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary; |
|
40 |
import org.gvsig.fmap.dal.coverage.store.props.ColorTable; |
|
41 |
import org.gvsig.raster.impl.datastruct.ColorItemImpl; |
|
42 |
import org.gvsig.raster.impl.store.properties.DatasetColorTable; |
|
43 |
import org.kxml2.io.KXmlParser; |
|
44 |
import org.kxml2.io.KXmlSerializer; |
|
45 |
import org.xmlpull.v1.XmlPullParserException; |
|
46 |
/** |
|
47 |
* La clase ColorTableLibraryPersistence sirve para controlar las tablas de color |
|
48 |
* genericas, como si fuera una libreria de tablas de color. Aqu? se comprueban |
|
49 |
* los cambios de versi?n. |
|
50 |
* |
|
51 |
* @version 02/07/2007 |
|
52 |
* @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es) |
|
53 |
*/ |
|
54 |
public class DefaultColorTableLibrary implements ColorTableLibrary { |
|
55 |
private static DefaultColorTableLibrary instance = null; |
|
56 |
|
|
57 |
/** |
|
58 |
* Gets the ColorTableLibrary |
|
59 |
* @return |
|
60 |
*/ |
|
61 |
public static ColorTableLibrary getInstance() { |
|
62 |
if(instance == null) |
|
63 |
instance = new DefaultColorTableLibrary(); |
|
64 |
return instance; |
|
65 |
} |
|
66 |
|
|
67 |
/* |
|
68 |
* (non-Javadoc) |
|
69 |
* @see org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary#createColorTable() |
|
70 |
*/ |
|
71 |
public ColorTable createColorTable() { |
|
72 |
return new DatasetColorTable(); |
|
73 |
} |
|
74 |
|
|
75 |
/** |
|
76 |
* Devuelve la lista de ficheros de paletas, si no existe el fichero devolvera |
|
77 |
* una lista vacia |
|
78 |
* @param palettesBasePath |
|
79 |
* @return |
|
80 |
*/ |
|
81 |
private ArrayList<String> getPaletteFileListDisc(String palettesBasePath) { |
|
82 |
updateVersion(palettesBasePath); |
|
83 |
|
|
84 |
File paletteFiles = new File(palettesBasePath); |
|
85 |
|
|
86 |
ArrayList<String> fileList = new ArrayList<String>(); |
|
87 |
|
|
88 |
if (paletteFiles.exists()) { |
|
89 |
File[] list = paletteFiles.listFiles(); |
|
90 |
for (int i = 0; i < list.length; i++) |
|
91 |
fileList.add(list[i].getName()); |
|
92 |
} |
|
93 |
|
|
94 |
return fileList; |
|
95 |
} |
|
96 |
|
|
97 |
/* |
|
98 |
* (non-Javadoc) |
|
99 |
* @see org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary#getPaletteFileList(java.lang.String) |
|
100 |
*/ |
|
101 |
public ArrayList<String> getPaletteFileList(String palettesBasePath) { |
|
102 |
return getPaletteFileList(palettesBasePath, true); |
|
103 |
} |
|
104 |
|
|
105 |
/** |
|
106 |
* Devuelve la lista de ficheros de paletas, en caso de que no exista la |
|
107 |
* paleta y se especifique forceCreate a true, se creara la paleta por defecto. |
|
108 |
* @param palettesBasePath |
|
109 |
* @param forceCreate |
|
110 |
* @return |
|
111 |
*/ |
|
112 |
public ArrayList<String> getPaletteFileList(String palettesBasePath, boolean forceCreate) { |
|
113 |
ArrayList <String>fileList = getPaletteFileListDisc(palettesBasePath); |
|
114 |
|
|
115 |
if (forceCreate && (fileList.size() == 0)) { |
|
116 |
DefaultColorTableLibrary persistence = new DefaultColorTableLibrary(); |
|
117 |
createVersionFromXML(palettesBasePath, persistence.getDefaultPaletteXML()); |
|
118 |
fileList = getPaletteFileListDisc(palettesBasePath); |
|
119 |
} |
|
120 |
|
|
121 |
return fileList; |
|
122 |
} |
|
123 |
|
|
124 |
/** |
|
125 |
* Devuelve el XML de una paleta por defecto |
|
126 |
* @return |
|
127 |
*/ |
|
128 |
public String getDefaultPaletteXML() { |
|
129 |
URL url = getClass().getResource("xml/palettes.xml"); |
|
130 |
StringBuffer contents = new StringBuffer(); |
|
131 |
try { |
|
132 |
InputStream inputStream = url.openStream(); |
|
133 |
|
|
134 |
int i; |
|
135 |
while (true) { |
|
136 |
i = inputStream.read(); |
|
137 |
if (i == -1) break; |
|
138 |
char c = (char) i; |
|
139 |
contents.append(c); |
|
140 |
} |
|
141 |
inputStream.close(); |
|
142 |
} catch (IOException e) { |
|
143 |
e.printStackTrace(); |
|
144 |
} |
|
145 |
|
|
146 |
return contents.toString(); |
|
147 |
} |
|
148 |
|
|
149 |
/** |
|
150 |
* Crea los ficheros que forman la paleta de color de la version 1.1 a traves |
|
151 |
* de un XML que se le pasa por parametro |
|
152 |
* @param palettesPath |
|
153 |
*/ |
|
154 |
private void createVersionFromXML(String palettesBasePath, String xml) { |
|
155 |
new File(palettesBasePath).mkdir(); |
|
156 |
KXmlParser parser = new KXmlParser(); |
|
157 |
StringReader reader = new StringReader(xml); |
|
158 |
try { |
|
159 |
parser.setInput(reader); |
|
160 |
int tag = parser.nextTag(); |
|
161 |
|
|
162 |
parser.require(KXmlParser.START_TAG, null, "palettes"); |
|
163 |
tag = parser.nextTag(); |
|
164 |
parser.require(KXmlParser.START_TAG, null, "palette_list"); |
|
165 |
parser.skipSubTree(); |
|
166 |
parser.require(KXmlParser.END_TAG, null, "palette_list"); |
|
167 |
tag = parser.nextTag(); |
|
168 |
|
|
169 |
while (tag == KXmlParser.START_TAG) { |
|
170 |
parser.require(KXmlParser.START_TAG, null, "palette"); |
|
171 |
if (parser.getAttributeCount() == 2) { |
|
172 |
// Generar nuevo fichero |
|
173 |
KXmlSerializer parserOutput = new KXmlSerializer(); |
|
174 |
FileOutputStream fileOutputStream = new FileOutputStream(palettesBasePath + File.separator + parser.getAttributeValue(0) + ".xml"); |
|
175 |
|
|
176 |
parserOutput.setOutput(fileOutputStream, null); |
|
177 |
parserOutput.startDocument("UTF-8", null); |
|
178 |
parserOutput.startTag(null, "ColorTable"); |
|
179 |
parserOutput.attribute(null, "name", parser.getAttributeValue(0)); |
|
180 |
parserOutput.attribute(null, "version", "1.1"); |
|
181 |
|
|
182 |
tag = parser.nextTag(); |
|
183 |
parser.require(KXmlParser.START_TAG, null, "table"); |
|
184 |
tag = parser.nextTag(); |
|
185 |
|
|
186 |
parserOutput.text("\n"); |
|
187 |
ArrayList<ColorItem> items = new ArrayList<ColorItem>(); |
|
188 |
while (tag == KXmlParser.START_TAG) { |
|
189 |
parser.require(KXmlParser.START_TAG, null, "entry"); |
|
190 |
if (parser.getAttributeCount() == 3) { |
|
191 |
String rgb = parser.getAttributeValue(1).substring(parser.getAttributeValue(1).indexOf(",") + 1, parser.getAttributeValue(1).length()); |
|
192 |
|
|
193 |
int a = Integer.valueOf(parser.getAttributeValue(1).substring(0, parser.getAttributeValue(1).indexOf(","))).intValue(); |
|
194 |
int r = Integer.valueOf(rgb.substring(0, rgb.indexOf(","))).intValue(); |
|
195 |
int g = Integer.valueOf(rgb.substring(rgb.indexOf(",") + 1, rgb.lastIndexOf(","))).intValue(); |
|
196 |
int b = Integer.valueOf(rgb.substring(rgb.lastIndexOf(",") + 1, rgb.length())).intValue(); |
|
197 |
|
|
198 |
ColorItem colorItem = new ColorItemImpl(); |
|
199 |
colorItem.setColor(new Color(r, g, b, a)); |
|
200 |
colorItem.setInterpolated(50); |
|
201 |
colorItem.setNameClass(parser.getAttributeValue(0)); |
|
202 |
colorItem.setValue(Double.parseDouble(parser.getAttributeValue(2))); |
|
203 |
items.add(colorItem); |
|
204 |
} |
|
205 |
tag = parser.nextTag(); |
|
206 |
parser.require(KXmlParser.END_TAG, null, "entry"); |
|
207 |
tag = parser.nextTag(); |
|
208 |
} |
|
209 |
parser.require(KXmlParser.END_TAG, null, "table"); |
|
210 |
tag = parser.nextTag(); |
|
211 |
|
|
212 |
ColorTable colorTable = new DatasetColorTable(); |
|
213 |
colorTable.createPaletteFromColorItems(items, true); |
|
214 |
items = colorTable.getColorItems(); |
|
215 |
for (int i = 0; i < items.size(); i++) { |
|
216 |
ColorItem colorItem = (ColorItem) items.get(i); |
|
217 |
parserOutput.startTag(null, "Color"); |
|
218 |
parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue())); |
|
219 |
parserOutput.attribute(null, "name", String.valueOf(colorItem.getNameClass())); |
|
220 |
Color color = colorItem.getColor(); |
|
221 |
parserOutput.attribute(null, "rgb", String.valueOf(color.getRed() + "," + color.getGreen() + "," + color.getBlue())); |
|
222 |
parserOutput.attribute(null, "interpolated", String.valueOf(colorItem.getInterpolated())); |
|
223 |
parserOutput.endTag(null, "Color"); |
|
224 |
parserOutput.text("\n"); |
|
225 |
} |
|
226 |
|
|
227 |
for (int i = 0; i < items.size(); i++) { |
|
228 |
ColorItem colorItem = (ColorItem) items.get(i); |
|
229 |
parserOutput.startTag(null, "Alpha"); |
|
230 |
parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue())); |
|
231 |
parserOutput.attribute(null, "alpha", String.valueOf(colorItem.getColor().getAlpha())); |
|
232 |
parserOutput.attribute(null, "interpolated", String.valueOf(colorItem.getInterpolated())); |
|
233 |
parserOutput.endTag(null, "Alpha"); |
|
234 |
parserOutput.text("\n"); |
|
235 |
} |
|
236 |
|
|
237 |
parserOutput.endTag(null, "ColorTable"); |
|
238 |
parserOutput.text("\n"); |
|
239 |
parserOutput.endDocument(); |
|
240 |
// Cerrar nuevo fichero |
|
241 |
fileOutputStream.close(); |
|
242 |
} |
|
243 |
parser.require(KXmlParser.END_TAG, null, "palette"); |
|
244 |
tag = parser.nextTag(); |
|
245 |
} |
|
246 |
parser.require(KXmlParser.END_TAG, null, "palettes"); |
|
247 |
} catch (XmlPullParserException xmlEx) { |
|
248 |
System.out.println("El fichero de paletas predeterminadas no tiene la estructura correcta:\n " + xmlEx.getMessage()); |
|
249 |
} catch (IOException e) { |
|
250 |
} |
|
251 |
} |
|
252 |
|
|
253 |
/** |
|
254 |
* Si existe la version de paleta 1.1, no lo actualizar?, en caso contrario, |
|
255 |
* buscara la version 1.0 y si lo encuentra lo subir? a la 1.1 |
|
256 |
* @param palettesPath |
|
257 |
*/ |
|
258 |
public void updateVersion_1_0_to_1_1(String palettesBasePath) { |
|
259 |
// Si no existe la paleta antigua, pero si que existe la copia de seguridad, |
|
260 |
// la restauramos |
|
261 |
File palettesFile = new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml"); |
|
262 |
if (!palettesFile.exists()) { |
|
263 |
// Cambiar nombre a antiguo fichero |
|
264 |
File oldFile = new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml~"); |
|
265 |
if (oldFile.exists()) { |
|
266 |
oldFile.renameTo(new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml")); |
|
267 |
} else { |
|
268 |
DefaultColorTableLibrary ctlp = new DefaultColorTableLibrary(); |
|
269 |
String text = ctlp.getDefaultPaletteXML(); |
|
270 |
palettesFile = new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml"); |
|
271 |
try { |
|
272 |
FileWriter writer = new FileWriter(palettesFile); |
|
273 |
writer.write(text); |
|
274 |
writer.close(); |
|
275 |
} catch (IOException e) { |
|
276 |
} |
|
277 |
} |
|
278 |
} |
|
279 |
|
|
280 |
// Si existe el directorio de la version 1.1 no hacemos la migraci?n |
|
281 |
File directoryFile = new File(palettesBasePath); |
|
282 |
if (directoryFile.exists()) |
|
283 |
return; |
|
284 |
|
|
285 |
// Si no encontramos la paleta antigua, nos olvidamos de continuar |
|
286 |
palettesFile = new File(new File(palettesBasePath).getParent().toString() + File.separator + "palettes.xml"); |
|
287 |
if (!palettesFile.exists()) |
|
288 |
return; |
|
289 |
|
|
290 |
// Paleta antigua encontrada, podemos migrar a la versi?n nueva |
|
291 |
try { |
|
292 |
FileInputStream inputStream = new FileInputStream(palettesFile); |
|
293 |
|
|
294 |
StringBuffer contents = new StringBuffer(); |
|
295 |
try { |
|
296 |
|
|
297 |
int i; |
|
298 |
while (true) { |
|
299 |
i = inputStream.read(); |
|
300 |
if (i == -1) break; |
|
301 |
char c = (char) i; |
|
302 |
contents.append(c); |
|
303 |
} |
|
304 |
} catch (IOException e) { |
|
305 |
e.printStackTrace(); |
|
306 |
} |
|
307 |
|
|
308 |
createVersionFromXML(palettesBasePath, contents.toString()); |
|
309 |
|
|
310 |
inputStream.close(); |
|
311 |
|
|
312 |
} catch (FileNotFoundException fnfEx) { |
|
313 |
fnfEx.printStackTrace(); |
|
314 |
} catch (IOException e) { |
|
315 |
e.printStackTrace(); |
|
316 |
} |
|
317 |
} |
|
318 |
|
|
319 |
/** |
|
320 |
* Si existe la version de paleta 1.0, la actualizara a la 1.1 y renombrar? la |
|
321 |
* antigua version. |
|
322 |
* @param palettesBasePath |
|
323 |
* @param colorTable |
|
324 |
*/ |
|
325 |
public void save_to_1_1(String palettesBasePath, ColorTable colorTable) { |
|
326 |
try { |
|
327 |
// Generar nuevo fichero |
|
328 |
KXmlSerializer parserOutput = new KXmlSerializer(); |
|
329 |
FileOutputStream out = new FileOutputStream(palettesBasePath + File.separator + colorTable.getName() + ".xml"); |
|
330 |
OutputStreamWriter writer = new OutputStreamWriter(out, "UTF8"); |
|
331 |
parserOutput.setOutput(writer); |
|
332 |
parserOutput.startDocument("UTF-8", null); |
|
333 |
parserOutput.startTag(null, "ColorTable"); |
|
334 |
parserOutput.attribute(null, "name", colorTable.getName()); |
|
335 |
parserOutput.attribute(null, "version", "1.1"); |
|
336 |
parserOutput.text("\n"); |
|
337 |
|
|
338 |
ArrayList<ColorItem> items = colorTable.getColorItems(); |
|
339 |
for (int i = 0; i < items.size(); i++) { |
|
340 |
ColorItem colorItem = (ColorItem) items.get(i); |
|
341 |
parserOutput.startTag(null, "Color"); |
|
342 |
parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue())); |
|
343 |
if (colorItem.getNameClass() != null) |
|
344 |
parserOutput.attribute(null, "name", String.valueOf(colorItem.getNameClass())); |
|
345 |
else |
|
346 |
parserOutput.attribute(null, "name", ""); |
|
347 |
Color color = colorItem.getColor(); |
|
348 |
parserOutput.attribute(null, "rgb", String.valueOf(color.getRed() + "," + color.getGreen() + "," + color.getBlue())); |
|
349 |
parserOutput.attribute(null, "interpolated", String.valueOf(colorItem.getInterpolated())); |
|
350 |
parserOutput.endTag(null, "Color"); |
|
351 |
parserOutput.text("\n"); |
|
352 |
} |
|
353 |
|
|
354 |
for (int i = 0; i < items.size(); i++) { |
|
355 |
ColorItem colorItem = (ColorItem) items.get(i); |
|
356 |
parserOutput.startTag(null, "Alpha"); |
|
357 |
parserOutput.attribute(null, "value", String.valueOf(colorItem.getValue())); |
|
358 |
parserOutput.attribute(null, "alpha", String.valueOf(colorItem.getColor().getAlpha())); |
|
359 |
parserOutput.attribute(null, "interpolated", String.valueOf(colorItem.getInterpolated())); |
|
360 |
parserOutput.endTag(null, "Alpha"); |
|
361 |
parserOutput.text("\n"); |
|
362 |
} |
|
363 |
|
|
364 |
parserOutput.endTag(null, "ColorTable"); |
|
365 |
parserOutput.text("\n"); |
|
366 |
parserOutput.endDocument(); |
|
367 |
// Cerrar nuevo fichero |
|
368 |
writer.close(); |
|
369 |
} catch (FileNotFoundException e) { |
|
370 |
e.printStackTrace(); |
|
371 |
} catch (IOException e) { |
|
372 |
e.printStackTrace(); |
|
373 |
} |
|
374 |
} |
|
375 |
|
|
376 |
/** |
|
377 |
* Invocar? todos los metodos de actualizaciones de version |
|
378 |
* @param palettesBasePath |
|
379 |
*/ |
|
380 |
public void updateVersion(String palettesBasePath) { |
|
381 |
updateVersion_1_0_to_1_1(palettesBasePath); |
|
382 |
//updateVersion_1_1_to_1_2(palettesBasePath); |
|
383 |
} |
|
384 |
|
|
385 |
/** |
|
386 |
* Devuelve el color si lo encuentra en el arraylist y lo elimina, en caso |
|
387 |
* contrario devuelve null |
|
388 |
* @param list |
|
389 |
* @param value |
|
390 |
* @return |
|
391 |
*/ |
|
392 |
public ColorItem getColorItem(ArrayList<ColorItem> list, double value) { |
|
393 |
for (int i = 0; i < list.size(); i++) { |
|
394 |
if (((ColorItem) list.get(i)).getValue() == value) { |
|
395 |
return (ColorItem) list.remove(i); |
|
396 |
} |
|
397 |
} |
|
398 |
return null; |
|
399 |
} |
|
400 |
|
|
401 |
/* |
|
402 |
* (non-Javadoc) |
|
403 |
* @see org.gvsig.fmap.dal.coverage.datastruct.ColorTableLibrary#loadPalette(java.lang.String, java.lang.String, java.util.ArrayList) |
|
404 |
*/ |
|
405 |
public String loadPalette(String palettesBasePath, String paletteFileName, ArrayList<ColorItem> items) { |
|
406 |
updateVersion(palettesBasePath); |
|
407 |
|
|
408 |
items.clear(); |
|
409 |
|
|
410 |
File palettesFile = new File(palettesBasePath + File.separator + paletteFileName); |
|
411 |
if (!palettesFile.exists()) |
|
412 |
return null; |
|
413 |
|
|
414 |
try { |
|
415 |
String paletteName = ""; |
|
416 |
ArrayList<ColorItem> rows = new ArrayList<ColorItem>(); |
|
417 |
|
|
418 |
KXmlParser parser = new KXmlParser(); |
|
419 |
FileInputStream in = new FileInputStream(palettesBasePath + File.separator + paletteFileName); |
|
420 |
|
|
421 |
InputStreamReader reader = new InputStreamReader(in, "UTF8"); |
|
422 |
parser.setInput(reader); |
|
423 |
int tag = parser.nextTag(); |
|
424 |
|
|
425 |
parser.require(KXmlParser.START_TAG, null, "ColorTable"); |
|
426 |
for (int i = 0; i < parser.getAttributeCount(); i++) { |
|
427 |
if (parser.getAttributeName(i).equals("name")) { |
|
428 |
paletteName = parser.getAttributeValue(i); |
|
429 |
} |
|
430 |
} |
|
431 |
tag = parser.nextTag(); |
|
432 |
|
|
433 |
while (!((tag == KXmlParser.END_TAG) && (parser.getName().equals("ColorTable")))) { |
|
434 |
try { |
|
435 |
if (tag == KXmlParser.START_TAG) { |
|
436 |
if (parser.getName().equals("Color")) { |
|
437 |
ColorItem colorItem = new ColorItemImpl(); |
|
438 |
int a = 255; |
|
439 |
for (int i = 0; i < parser.getAttributeCount(); i++) { |
|
440 |
if (parser.getAttributeName(i).equals("value")) { |
|
441 |
colorItem.setValue(Double.parseDouble((String) parser.getAttributeValue(i))); |
|
442 |
ColorItem aux = getColorItem(rows, Double.parseDouble((String) parser.getAttributeValue(i))); |
|
443 |
if (aux != null) |
|
444 |
a = aux.getColor().getAlpha(); |
|
445 |
} |
|
446 |
if (parser.getAttributeName(i).equals("name")) { |
|
447 |
colorItem.setNameClass((String) parser.getAttributeValue(i)); |
|
448 |
} |
|
449 |
if (parser.getAttributeName(i).equals("rgb")) { |
|
450 |
String rgb = parser.getAttributeValue(i); |
|
451 |
int r = Integer.valueOf(rgb.substring(0, rgb.indexOf(","))).intValue(); |
|
452 |
int g = Integer.valueOf(rgb.substring(rgb.indexOf(",") + 1, rgb.lastIndexOf(","))).intValue(); |
|
453 |
int b = Integer.valueOf(rgb.substring(rgb.lastIndexOf(",") + 1, rgb.length())).intValue(); |
|
454 |
|
|
455 |
colorItem.setColor(new Color(r, g, b, a)); |
|
456 |
} |
|
457 |
if (parser.getAttributeName(i).equals("interpolated")) { |
|
458 |
colorItem.setInterpolated(Double.parseDouble((String) parser.getAttributeValue(i))); |
|
459 |
} |
|
460 |
} |
|
461 |
|
|
462 |
rows.add(colorItem); |
|
463 |
continue; |
|
464 |
} |
|
465 |
if (parser.getName().equals("Alpha")) { |
|
466 |
ColorItem colorItem = new ColorItemImpl(); |
|
467 |
for (int i = 0; i < parser.getAttributeCount(); i++) { |
|
468 |
if (parser.getAttributeName(i).equals("value")) { |
|
469 |
colorItem.setValue(Double.parseDouble((String) parser.getAttributeValue(i))); |
|
470 |
ColorItem aux = getColorItem(rows, Double.parseDouble((String) parser.getAttributeValue(i))); |
|
471 |
if (aux != null) { |
|
472 |
colorItem.setNameClass(aux.getNameClass()); |
|
473 |
colorItem.setInterpolated(aux.getInterpolated()); |
|
474 |
colorItem.setColor(new Color(aux.getColor().getRed(), aux.getColor().getGreen(), aux.getColor().getBlue(), colorItem.getColor().getAlpha())); |
|
475 |
} |
|
476 |
} |
|
477 |
if (parser.getAttributeName(i).equals("alpha")) { |
|
478 |
int a = Integer.parseInt(parser.getAttributeValue(i)); |
|
479 |
|
|
480 |
colorItem.setColor(new Color(colorItem.getColor().getRed(), colorItem.getColor().getGreen(), colorItem.getColor().getBlue(), a)); |
|
481 |
} |
|
482 |
if (parser.getAttributeName(i).equals("interpolated")) { |
|
483 |
colorItem.setInterpolated(Double.parseDouble((String) parser.getAttributeValue(i))); |
|
484 |
} |
|
485 |
} |
|
486 |
|
|
487 |
rows.add(colorItem); |
|
488 |
continue; |
|
489 |
} |
|
490 |
} |
|
491 |
} finally { |
|
492 |
tag = parser.nextTag(); |
|
493 |
} |
|
494 |
} |
|
495 |
|
|
496 |
for (int i = 0; i < rows.size(); i++) |
|
497 |
items.add(rows.get(i)); |
|
498 |
|
|
499 |
reader.close(); |
|
500 |
return paletteName; |
|
501 |
} catch (FileNotFoundException fnfEx) { |
|
502 |
fnfEx.printStackTrace(); |
|
503 |
} catch (XmlPullParserException xmlEx) { |
|
504 |
System.out.println("El fichero de paletas predeterminadas no tiene la estructura correcta:\n " + xmlEx.getMessage()); |
|
505 |
} catch (IOException e) { |
|
506 |
} |
|
507 |
return null; |
|
508 |
} |
|
509 |
} |
org.gvsig.raster/trunk/org.gvsig.raster/org.gvsig.raster.lib/org.gvsig.raster.lib.impl/src/main/java/org/gvsig/raster/impl/datastruct/persistence/xml/palettes.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="ISO-8859-1"?> |
|
2 |
<palettes> |
|
3 |
<palette_list> |
|
4 |
<name>Ninguna</name> |
|
5 |
<name>Default</name> |
|
6 |
<name>purple-red+stripes</name> |
|
7 |
<name>blue-white</name> |
|
8 |
<name>ocean</name> |
|
9 |
<name>red-temperature</name> |
|
10 |
<name>16level</name> |
|
11 |
<name>blue-green-red-yellow</name> |
|
12 |
<name>blue-pastel-red</name> |
|
13 |
<name>blue-red</name> |
|
14 |
<name>blue-waves</name> |
|
15 |
<name>green-red-blue</name> |
|
16 |
<name>green-white-exponential</name> |
|
17 |
<name>hardcandy</name> |
|
18 |
<name>haze</name> |
|
19 |
<name>mac-style</name> |
|
20 |
<name>nature</name> |
|
21 |
<name>pastels</name> |
|
22 |
<name>plasma</name> |
|
23 |
<name>prism</name> |
|
24 |
<name>rainbow</name> |
|
25 |
<name>red-purple</name> |
|
26 |
<name>std-gamma-II</name> |
|
27 |
<name>steps</name> |
|
28 |
<name>stern-special</name> |
|
29 |
<name>MDT1</name> |
|
30 |
<name>MDT2</name> |
|
31 |
<name>CLASIFICACION</name> |
|
32 |
</palette_list> |
|
33 |
|
|
34 |
<palette name="Default" interpolate="false"> |
|
35 |
<table> |
|
36 |
<entry class="" argb="255,0,0,0" value="0" /> |
|
37 |
<entry class="" argb="255,255,255,255" value="255" /> |
|
38 |
</table> |
|
39 |
</palette> |
|
40 |
|
|
41 |
<palette name="purple-red+stripes" interpolate="false"> |
|
42 |
<table> |
|
43 |
<entry class="" argb="255,0,0,0" value="0" /> |
|
44 |
<entry class="" argb="255,0,0,0" value="1" /> |
|
45 |
<entry class="" argb="255,127,127,127" value="2" /> |
|
46 |
<entry class="" argb="255,191,0,191" value="3" /> |
|
47 |
<entry class="" argb="255,188,0,192" value="4" /> |
|
48 |
<entry class="" argb="255,186,0,192" value="5" /> |
|
49 |
<entry class="" argb="255,184,0,193" value="6" /> |
|
50 |
<entry class="" argb="255,182,0,194" value="7" /> |
|
51 |
<entry class="" argb="255,179,0,195" value="8" /> |
|
52 |
<entry class="" argb="255,177,0,195" value="9" /> |
|
53 |
<entry class="" argb="255,140,0,157" value="10" /> |
|
54 |
<entry class="" argb="255,138,0,157" value="11" /> |
|
55 |
<entry class="" argb="255,170,0,198" value="12" /> |
|
56 |
<entry class="" argb="255,168,0,198" value="13" /> |
|
57 |
<entry class="" argb="255,165,0,199" value="14" /> |
|
58 |
<entry class="" argb="255,163,0,200" value="15" /> |
|
59 |
<entry class="" argb="255,161,0,201" value="16" /> |
|
60 |
<entry class="" argb="255,158,0,202" value="17" /> |
|
61 |
<entry class="" argb="255,156,0,202" value="18" /> |
|
62 |
<entry class="" argb="255,154,0,203" value="19" /> |
|
63 |
<entry class="" argb="255,121,0,163" value="20" /> |
|
64 |
<entry class="" argb="255,119,0,164" value="21" /> |
|
65 |
<entry class="" argb="255,147,0,205" value="22" /> |
|
66 |
<entry class="" argb="255,145,0,206" value="23" /> |
|
67 |
<entry class="" argb="255,142,0,207" value="24" /> |
|
68 |
<entry class="" argb="255,140,0,208" value="25" /> |
|
69 |
<entry class="" argb="255,138,0,208" value="26" /> |
|
70 |
<entry class="" argb="255,135,0,209" value="27" /> |
|
71 |
<entry class="" argb="255,133,0,210" value="28" /> |
|
72 |
<entry class="" argb="255,131,0,211" value="29" /> |
|
73 |
<entry class="" argb="255,103,0,169" value="30" /> |
|
74 |
<entry class="" argb="255,101,0,170" value="31" /> |
|
75 |
<entry class="" argb="255,124,0,213" value="32" /> |
|
76 |
<entry class="" argb="255,122,0,214" value="33" /> |
|
77 |
<entry class="" argb="255,119,0,215" value="34" /> |
|
78 |
<entry class="" argb="255,117,0,215" value="35" /> |
|
79 |
<entry class="" argb="255,115,0,216" value="36" /> |
|
80 |
<entry class="" argb="255,112,0,217" value="37" /> |
|
81 |
<entry class="" argb="255,110,0,218" value="38" /> |
|
82 |
<entry class="" argb="255,108,0,218" value="39" /> |
|
83 |
<entry class="" argb="255,84,0,175" value="40" /> |
|
84 |
<entry class="" argb="255,82,0,176" value="41" /> |
|
85 |
<entry class="" argb="255,101,0,221" value="42" /> |
|
86 |
<entry class="" argb="255,99,0,221" value="43" /> |
|
87 |
<entry class="" argb="255,96,0,222" value="44" /> |
|
88 |
<entry class="" argb="255,94,0,223" value="45" /> |
|
89 |
<entry class="" argb="255,92,0,224" value="46" /> |
|
90 |
<entry class="" argb="255,89,0,225" value="47" /> |
|
91 |
<entry class="" argb="255,87,0,225" value="48" /> |
|
92 |
<entry class="" argb="255,85,0,226" value="49" /> |
|
93 |
<entry class="" argb="255,66,0,181" value="50" /> |
|
94 |
<entry class="" argb="255,64,0,182" value="51" /> |
|
95 |
<entry class="" argb="255,78,0,228" value="52" /> |
|
96 |
<entry class="" argb="255,76,0,229" value="53" /> |
|
97 |
<entry class="" argb="255,73,0,230" value="54" /> |
|
98 |
<entry class="" argb="255,71,0,231" value="55" /> |
|
99 |
<entry class="" argb="255,69,0,231" value="56" /> |
|
100 |
<entry class="" argb="255,66,0,232" value="57" /> |
|
101 |
<entry class="" argb="255,64,0,233" value="58" /> |
|
102 |
<entry class="" argb="255,62,0,234" value="59" /> |
|
103 |
<entry class="" argb="255,47,0,188" value="60" /> |
|
104 |
<entry class="" argb="255,46,0,188" value="61" /> |
|
105 |
<entry class="" argb="255,55,0,236" value="62" /> |
|
106 |
<entry class="" argb="255,52,0,237" value="63" /> |
|
107 |
<entry class="" argb="255,50,0,238" value="64" /> |
|
108 |
<entry class="" argb="255,48,0,238" value="65" /> |
|
109 |
<entry class="" argb="255,46,0,239" value="66" /> |
|
110 |
<entry class="" argb="255,43,0,240" value="67" /> |
|
111 |
<entry class="" argb="255,41,0,241" value="68" /> |
|
112 |
<entry class="" argb="255,39,0,241" value="69" /> |
|
113 |
<entry class="" argb="255,29,0,194" value="70" /> |
|
114 |
<entry class="" argb="255,27,0,194" value="71" /> |
|
115 |
<entry class="" argb="255,32,0,244" value="72" /> |
|
116 |
<entry class="" argb="255,29,0,245" value="73" /> |
|
117 |
<entry class="" argb="255,27,0,245" value="74" /> |
|
118 |
<entry class="" argb="255,25,0,246" value="75" /> |
|
119 |
<entry class="" argb="255,23,0,247" value="76" /> |
|
120 |
<entry class="" argb="255,20,0,248" value="77" /> |
|
121 |
<entry class="" argb="255,18,0,248" value="78" /> |
|
122 |
<entry class="" argb="255,16,0,249" value="79" /> |
|
123 |
<entry class="" argb="255,11,0,200" value="80" /> |
|
124 |
<entry class="" argb="255,9,0,200" value="81" /> |
|
125 |
<entry class="" argb="255,9,0,251" value="82" /> |
|
126 |
<entry class="" argb="255,6,0,252" value="83" /> |
|
127 |
<entry class="" argb="255,4,0,253" value="84" /> |
|
128 |
<entry class="" argb="255,2,0,254" value="85" /> |
|
129 |
<entry class="" argb="255,0,0,255" value="86" /> |
|
130 |
<entry class="" argb="255,0,6,255" value="87" /> |
|
131 |
<entry class="" argb="255,0,12,255" value="88" /> |
|
132 |
<entry class="" argb="255,0,18,255" value="89" /> |
|
133 |
<entry class="" argb="255,0,19,204" value="90" /> |
|
134 |
<entry class="" argb="255,0,24,204" value="91" /> |
|
135 |
<entry class="" argb="255,0,36,255" value="92" /> |
|
136 |
<entry class="" argb="255,0,42,255" value="93" /> |
|
137 |
<entry class="" argb="255,0,48,255" value="94" /> |
|
138 |
<entry class="" argb="255,0,54,255" value="95" /> |
|
139 |
<entry class="" argb="255,0,60,255" value="96" /> |
|
140 |
<entry class="" argb="255,0,66,255" value="97" /> |
|
141 |
<entry class="" argb="255,0,72,255" value="98" /> |
|
142 |
<entry class="" argb="255,0,78,255" value="99" /> |
|
143 |
<entry class="" argb="255,0,68,204" value="100" /> |
|
144 |
<entry class="" argb="255,0,72,204" value="101" /> |
|
145 |
<entry class="" argb="255,0,97,255" value="102" /> |
|
146 |
<entry class="" argb="255,0,103,255" value="103" /> |
|
147 |
<entry class="" argb="255,0,109,255" value="104" /> |
|
148 |
<entry class="" argb="255,0,115,255" value="105" /> |
|
149 |
<entry class="" argb="255,0,121,255" value="106" /> |
|
150 |
<entry class="" argb="255,0,127,255" value="107" /> |
|
151 |
<entry class="" argb="255,0,133,255" value="108" /> |
|
152 |
<entry class="" argb="255,0,139,255" value="109" /> |
|
153 |
<entry class="" argb="255,0,116,204" value="110" /> |
|
154 |
<entry class="" argb="255,0,121,204" value="111" /> |
|
155 |
<entry class="" argb="255,0,157,255" value="112" /> |
|
156 |
<entry class="" argb="255,0,163,255" value="113" /> |
|
157 |
<entry class="" argb="255,0,170,255" value="114" /> |
|
158 |
<entry class="" argb="255,0,176,255" value="115" /> |
|
159 |
<entry class="" argb="255,0,182,255" value="116" /> |
|
160 |
<entry class="" argb="255,0,188,255" value="117" /> |
|
161 |
<entry class="" argb="255,0,194,255" value="118" /> |
|
162 |
<entry class="" argb="255,0,200,255" value="119" /> |
|
163 |
<entry class="" argb="255,0,165,204" value="120" /> |
|
164 |
<entry class="" argb="255,0,170,204" value="121" /> |
|
165 |
<entry class="" argb="255,0,218,255" value="122" /> |
|
166 |
<entry class="" argb="255,0,224,255" value="123" /> |
|
167 |
<entry class="" argb="255,0,230,255" value="124" /> |
|
168 |
<entry class="" argb="255,0,236,255" value="125" /> |
|
169 |
<entry class="" argb="255,0,242,255" value="126" /> |
|
170 |
<entry class="" argb="255,0,248,255" value="127" /> |
|
171 |
<entry class="" argb="255,0,255,255" value="128" /> |
|
172 |
<entry class="" argb="255,0,255,248" value="129" /> |
|
173 |
<entry class="" argb="255,0,204,194" value="130" /> |
|
174 |
<entry class="" argb="255,0,204,189" value="131" /> |
|
175 |
<entry class="" argb="255,0,255,230" value="132" /> |
|
176 |
<entry class="" argb="255,0,255,224" value="133" /> |
|
177 |
<entry class="" argb="255,0,255,218" value="134" /> |
|
178 |
<entry class="" argb="255,0,255,212" value="135" /> |
|
179 |
<entry class="" argb="255,0,255,206" value="136" /> |
|
180 |
<entry class="" argb="255,0,255,200" value="137" /> |
|
181 |
<entry class="" argb="255,0,255,194" value="138" /> |
|
182 |
<entry class="" argb="255,0,255,188" value="139" /> |
|
183 |
<entry class="" argb="255,0,204,145" value="140" /> |
|
184 |
<entry class="" argb="255,0,204,140" value="141" /> |
|
185 |
<entry class="" argb="255,0,255,169" value="142" /> |
|
186 |
<entry class="" argb="255,0,255,163" value="143" /> |
|
187 |
<entry class="" argb="255,0,255,157" value="144" /> |
|
188 |
<entry class="" argb="255,0,255,151" value="145" /> |
|
189 |
<entry class="" argb="255,0,255,145" value="146" /> |
|
190 |
<entry class="" argb="255,0,255,139" value="147" /> |
|
191 |
<entry class="" argb="255,0,255,133" value="148" /> |
|
192 |
<entry class="" argb="255,0,255,127" value="149" /> |
|
193 |
<entry class="" argb="255,0,204,97" value="150" /> |
|
194 |
<entry class="" argb="255,0,204,92" value="151" /> |
|
195 |
<entry class="" argb="255,0,255,109" value="152" /> |
|
196 |
<entry class="" argb="255,0,255,103" value="153" /> |
|
197 |
<entry class="" argb="255,0,255,97" value="154" /> |
|
198 |
<entry class="" argb="255,0,255,91" value="155" /> |
|
199 |
<entry class="" argb="255,0,255,84" value="156" /> |
|
200 |
<entry class="" argb="255,0,255,78" value="157" /> |
|
201 |
<entry class="" argb="255,0,255,72" value="158" /> |
|
202 |
<entry class="" argb="255,0,255,66" value="159" /> |
|
203 |
<entry class="" argb="255,0,204,48" value="160" /> |
|
204 |
<entry class="" argb="255,0,204,43" value="161" /> |
|
205 |
<entry class="" argb="255,0,255,48" value="162" /> |
|
206 |
<entry class="" argb="255,0,255,42" value="163" /> |
|
207 |
<entry class="" argb="255,0,255,36" value="164" /> |
|
208 |
<entry class="" argb="255,0,255,30" value="165" /> |
|
209 |
<entry class="" argb="255,0,255,24" value="166" /> |
|
210 |
<entry class="" argb="255,0,255,18" value="167" /> |
|
211 |
<entry class="" argb="255,0,255,12" value="168" /> |
|
212 |
<entry class="" argb="255,0,255,6" value="169" /> |
|
213 |
<entry class="" argb="255,0,204,0" value="170" /> |
|
214 |
<entry class="" argb="255,4,204,0" value="171" /> |
|
215 |
<entry class="" argb="255,12,255,0" value="172" /> |
|
216 |
<entry class="" argb="255,18,255,0" value="173" /> |
|
217 |
<entry class="" argb="255,24,255,0" value="174" /> |
|
218 |
<entry class="" argb="255,30,255,0" value="175" /> |
|
219 |
<entry class="" argb="255,36,255,0" value="176" /> |
|
220 |
<entry class="" argb="255,42,255,0" value="177" /> |
|
221 |
<entry class="" argb="255,48,255,0" value="178" /> |
|
222 |
<entry class="" argb="255,54,255,0" value="179" /> |
|
223 |
<entry class="" argb="255,48,204,0" value="180" /> |
|
224 |
<entry class="" argb="255,53,204,0" value="181" /> |
|
225 |
<entry class="" argb="255,72,255,0" value="182" /> |
|
226 |
<entry class="" argb="255,78,255,0" value="183" /> |
|
227 |
<entry class="" argb="255,85,255,0" value="184" /> |
|
228 |
<entry class="" argb="255,91,255,0" value="185" /> |
|
229 |
<entry class="" argb="255,97,255,0" value="186" /> |
|
230 |
<entry class="" argb="255,103,255,0" value="187" /> |
|
231 |
<entry class="" argb="255,109,255,0" value="188" /> |
|
232 |
<entry class="" argb="255,115,255,0" value="189" /> |
|
233 |
<entry class="" argb="255,97,204,0" value="190" /> |
|
234 |
<entry class="" argb="255,102,204,0" value="191" /> |
|
235 |
<entry class="" argb="255,133,255,0" value="192" /> |
|
236 |
<entry class="" argb="255,139,255,0" value="193" /> |
|
237 |
<entry class="" argb="255,145,255,0" value="194" /> |
|
238 |
<entry class="" argb="255,151,255,0" value="195" /> |
|
239 |
<entry class="" argb="255,157,255,0" value="196" /> |
|
240 |
<entry class="" argb="255,163,255,0" value="197" /> |
|
241 |
<entry class="" argb="255,170,255,0" value="198" /> |
|
242 |
<entry class="" argb="255,176,255,0" value="199" /> |
|
243 |
<entry class="" argb="255,145,204,0" value="200" /> |
|
244 |
<entry class="" argb="255,150,204,0" value="201" /> |
|
245 |
<entry class="" argb="255,194,255,0" value="202" /> |
|
246 |
<entry class="" argb="255,200,255,0" value="203" /> |
|
247 |
<entry class="" argb="255,206,255,0" value="204" /> |
|
248 |
<entry class="" argb="255,212,255,0" value="205" /> |
|
249 |
<entry class="" argb="255,218,255,0" value="206" /> |
|
250 |
<entry class="" argb="255,224,255,0" value="207" /> |
|
251 |
<entry class="" argb="255,230,255,0" value="208" /> |
|
252 |
<entry class="" argb="255,236,255,0" value="209" /> |
|
253 |
<entry class="" argb="255,194,204,0" value="210" /> |
|
254 |
<entry class="" argb="255,199,204,0" value="211" /> |
|
255 |
<entry class="" argb="255,255,255,0" value="212" /> |
|
256 |
<entry class="" argb="255,255,248,2" value="213" /> |
|
257 |
<entry class="" argb="255,255,242,5" value="214" /> |
|
258 |
<entry class="" argb="255,255,235,7" value="215" /> |
|
259 |
<entry class="" argb="255,255,229,10" value="216" /> |
|
260 |
<entry class="" argb="255,255,223,12" value="217" /> |
|
261 |
<entry class="" argb="255,255,216,15" value="218" /> |
|
262 |
<entry class="" argb="255,255,210,17" value="219" /> |
|
263 |
<entry class="" argb="255,204,163,16" value="220" /> |
|
264 |
<entry class="" argb="255,204,158,18" value="221" /> |
|
265 |
<entry class="" argb="255,255,191,25" value="222" /> |
|
266 |
<entry class="" argb="255,255,184,28" value="223" /> |
|
267 |
<entry class="" argb="255,255,178,30" value="224" /> |
|
268 |
<entry class="" argb="255,255,172,33" value="225" /> |
|
269 |
<entry class="" argb="255,255,165,35" value="226" /> |
Also available in: Unified diff