Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wms / trunk / org.gvsig.raster.wms / org.gvsig.raster.wms.app.wmsclient / src / main / java / org / gvsig / raster / wms / app / wmsclient / infobypoint / viewtool / PixelInspectorViewTool.java @ 2484

History | View | Annotate | Download (5.07 KB)

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.wms.app.wmsclient.infobypoint.viewtool;
23

    
24
import java.awt.event.MouseEvent;
25
import java.awt.geom.Point2D;
26
import java.awt.image.BufferedImage;
27

    
28
import org.gvsig.fmap.dal.coverage.RasterLocator;
29
import org.gvsig.fmap.dal.coverage.RasterManager;
30
import org.gvsig.fmap.dal.coverage.util.ColorConversion;
31
import org.gvsig.fmap.mapcontext.ViewPort;
32
import org.gvsig.fmap.mapcontext.layers.FLayer;
33
import org.gvsig.fmap.mapcontrol.MapControl;
34
import org.gvsig.fmap.mapcontrol.tools.BehaviorException;
35
import org.gvsig.fmap.mapcontrol.tools.Behavior.Behavior;
36
import org.gvsig.fmap.mapcontrol.tools.Listeners.ToolListener;
37
import org.gvsig.raster.fmap.layers.FLyrRaster;
38
import org.gvsig.raster.swing.infobypoint.InfoByPointDataModel;
39
import org.gvsig.raster.swing.pixelinspector.PixelInspector;
40

    
41

    
42
/**
43
 * Behavior to be added to the MapControl. With this behavior will be
44
 * possible to manage the mouse event on the view 
45
 * 
46
 * @author Nacho Brodin (nachobrodin@gmail.com)
47
 */
48
public class PixelInspectorViewTool extends Behavior {
49
        private RasterManager            rManager            = RasterLocator.getManager();
50
        private InfoByPointDataModel     model               = null;
51
        private ColorConversion          conv                = null;
52
        private ViewPort                 viewPort            = null;
53
        private MapControl               mapCtrl             = null;
54
        private PixelInspector           observer            = null;
55
        
56
        /**
57
         * Constructor. Asigna el dialogo
58
         * @param dialog
59
         */
60
        public PixelInspectorViewTool(MapControl mapCtrl, InfoByPointDataModel model, PixelInspector observer) {
61
                this.mapCtrl = mapCtrl;
62
                this.model = model;
63
                this.observer = observer;
64
                conv = rManager.getColorConversion();
65
                viewPort = mapCtrl.getViewPort();
66
        }
67
        
68
        public FLyrRaster getLayer(Point2D p) {
69
                FLyrRaster raster = null;
70
                for (int i = mapCtrl.getMapContext().getLayers().getLayersCount() - 1; i >= 0; i--) {
71
                        FLayer lyr = mapCtrl.getMapContext().getLayers().getLayer(i);
72
                        if(lyr instanceof FLyrRaster) {
73
                                raster = (FLyrRaster)lyr;
74
                                if(raster.isInside(p))
75
                                        return raster;
76
                        }
77
                }
78
                return null;
79
        }
80
        
81
        /*
82
         *  (non-Javadoc)
83
         * @see com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#getListener()
84
         */
85
        public ToolListener getListener() {
86
                return null;
87
        }
88
        
89
        /*
90
         *  (non-Javadoc)
91
         * @see com.iver.cit.gvsig.fmap.tools.Behavior.IBehavior#mouseMoved(java.awt.event.MouseEvent)
92
         */
93
        @SuppressWarnings("deprecation")
94
        public void mouseMoved(MouseEvent e) throws BehaviorException {
95
                Point2D point2D = new Point2D.Double(e.getX(), e.getY());
96
                BufferedImage image = mapCtrl.getImage();
97
                
98
                //Actualiza los datos del panel
99
                if(e.getX() >= image.getWidth() || e.getY() >= image.getHeight())
100
                        return;
101
                int value = image.getRGB((int) point2D.getX(), (int) point2D.getY());
102
                int r = (value >> 16) & 0xff;
103
                int g = (value >> 8) & 0xff;
104
                int b = value & 0xff;
105
                
106
                double[] cmyk = conv.RGBtoCMYK(r & 0xff, g & 0xff, b & 0xff, 1D);
107
                
108
                double[] hsl = conv.RGBtoHSL(r & 0xff, g & 0xff, b & 0xff);
109
                hsl[0] = (int)(255.0 * hsl[0] / 360.0 + 0.5);
110
                hsl[2] = (int) (hsl[2] * 255. + 0.5);
111
                hsl[1] = (int) (hsl[1] * 255. + 0.5);
112
                
113
                Point2D mapPoint = viewPort.toMapPoint(point2D);
114
                
115
                model.setARGB(r, g, b);
116
                model.setCMYK(cmyk);
117
                model.setHSL(hsl[0], hsl[1], hsl[2]);
118
                model.setViewPoint(point2D.getX(), point2D.getY());
119
                model.setWorldPoint(mapPoint.getX(), mapPoint.getY());
120
                
121
                //Raster dependent
122
                FLyrRaster raster = getLayer(mapPoint);
123
                if(raster != null && raster.getDataStore() != null) {
124
                        Point2D rasterPoint = raster.getDataStore().worldToRaster(mapPoint);
125
                        model.setNumberOfBands(raster.getDataStore().getBandCount());
126
                        model.setPixelPoint(rasterPoint.getX(), rasterPoint.getY());
127
                } /*else {
128
                        model.setNumberOfBands(0);
129
                        model.setBandValues(new double[]{Double.NaN});
130
                        model.setPixelPoint(-1, -1);
131
                }*/
132
                
133
                model.notifyObservers();
134
                
135
                //Actualiza el inspector
136
                observer.setClear(false);
137
                observer.setDataBuffer(image);
138
                int pX = ((observer.getWidth() / observer.getScale()) >> 1) - e.getX();
139
                int pY = ((observer.getHeight() / observer.getScale()) >> 1) - e.getY();
140
                observer.setViewCoordinates((int)e.getPoint().getX(), (int)e.getPoint().getY());
141
                observer.setPosX(pX);
142
                observer.setPosY(pY);
143
                observer.repaint();
144
        }
145

    
146
}