Statistics
| Revision:

root / branches / CqCMSDvp / libraries / libCq CMS for java.old / src / org / cresques / io / raster / TransparencyFilter.java @ 1812

History | View | Annotate | Download (2.89 KB)

1
/*
2
 * Created on 11-abril-2005
3
 */
4
package org.cresques.io.raster;
5

    
6
import java.awt.Image;
7
import java.util.Vector;
8

    
9
/**
10
 * @author Nacho Brodin <brodin_ign@gva.es>
11
 * 
12
 * Clase base para los filtros de transparencia en sus diferentes tipos
13
 * de datos.
14
 */ 
15
public abstract class TransparencyFilter extends RasterFilter{
16
        public boolean debug = false;
17
        
18
        //Par?metros del filtro
19
        protected int[][] rangesR;
20
        protected int[][] rangesG;
21
        protected int[][] rangesB;
22
        public int                 alpha = 0x10;
23
        public int                 transparencyColorRed = 0xff;
24
        public int                 transparencyColorGreen = 0xff;
25
        public int                 transparencyColorBlue = 0xff;
26
        
27
        
28
        public TransparencyFilter(){
29
                super();
30
        }
31
        
32
        /**
33
         * Obtiene par?metros del filtro desde la tabla Hash
34
         */
35
        public void pre(){
36
                //Obtenci?n de par?metros comunes a todos
37
                this.rangesR = (int[][])params.get("red");
38
                this.rangesG = (int[][])params.get("green");
39
                this.rangesB = (int[][])params.get("blue");
40
                this.alpha = ((Integer)params.get("alpha")).intValue();
41
                this.transparencyColorRed = ((Integer)params.get("transparencyRed")).intValue();
42
                this.transparencyColorGreen = ((Integer)params.get("transparencyGreen")).intValue();
43
                this.transparencyColorBlue = ((Integer)params.get("transparencyBlue")).intValue();
44
        }
45
        
46
        /**
47
         * Para dos intervalos dados, devuelve true si el intervalo B est? dentro del A y
48
         * false si no lo est?
49
         * @param intervalA
50
         * @param intervalB
51
         * @return
52
         */
53
        private boolean compareIntervals(int[][] intervalA, int[][] intervalB){
54
                if(intervalA != null && intervalB != null){
55
                        boolean equalInterval = false;
56
                        for(int i=0;i<intervalB.length;i++){
57
                                for(int j=0;j<intervalA.length;j++){
58
                                        if(        intervalB[i][0] >= intervalA[i][0] && 
59
                                                intervalB[i][1] <= intervalA[i][1]){
60
                                                equalInterval = true;
61
                                                break;
62
                                        }
63
                                }
64
                                if(!equalInterval)
65
                                        return false;
66
                        }
67
                        return true;
68
                }
69
                
70
                if(intervalA == null && intervalB == null)
71
                        return true;
72
                
73
                return false;
74
        }
75
        
76
        /**
77
         * Devuelve true si el filtro pasado por par?metro es equivalente a este
78
         * y false si no lo es.
79
         * @param filter        Filtro a comparar
80
         * @return        true si son equivalentes y false si no lo son
81
         */
82
        public boolean isEquivalent(TransparencyFilter filter){
83
                
84
                if(        alpha!=filter.alpha ||
85
                        transparencyColorRed != filter.transparencyColorRed ||
86
                        transparencyColorGreen != filter.transparencyColorGreen ||
87
                        transparencyColorBlue != filter.transparencyColorBlue)
88
                        return false;
89
                
90
                boolean equalRange = false;
91
                equalRange = compareIntervals((int[][])params.get("red"), (int[][])filter.params.get("red"));
92
                if(!equalRange)
93
                        return false;
94
                equalRange = false;
95
                equalRange = compareIntervals((int[][])params.get("green"), (int[][])filter.params.get("green"));
96
                if(!equalRange)
97
                        return false;
98
                equalRange = false;
99
                equalRange = compareIntervals((int[][])params.get("blue"), (int[][])filter.params.get("blue"));
100
                if(!equalRange)
101
                        return false;
102
                
103
                return true;                
104
        }
105
        
106
}
107

    
108

    
109