Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.raster.tools / org.gvsig.raster.tools.app / org.gvsig.raster.tools.app.mainplugin / src / main / java / org / gvsig / raster / tools / app / mainplugin / ExportViewToImageExtension.java @ 8843

History | View | Annotate | Download (4.37 KB)

1
package org.gvsig.raster.tools.app.mainplugin;
2

    
3
import java.awt.Graphics2D;
4
import java.awt.image.BufferedImage;
5
import java.io.IOException;
6

    
7
import org.apache.commons.lang3.StringUtils;
8
import org.slf4j.Logger;
9
import org.slf4j.LoggerFactory;
10

    
11
import org.gvsig.andami.IconThemeHelper;
12
import org.gvsig.andami.plugins.Extension;
13
import org.gvsig.app.ApplicationLocator;
14
import org.gvsig.app.ApplicationManager;
15
import org.gvsig.app.project.documents.view.ViewDocument;
16
import org.gvsig.app.project.documents.view.gui.IView;
17
import org.gvsig.fmap.dal.exception.ReadException;
18
import org.gvsig.fmap.geom.primitive.Envelope;
19
import org.gvsig.fmap.mapcontext.MapContext;
20
import org.gvsig.fmap.mapcontext.MapContextException;
21
import org.gvsig.fmap.mapcontext.ViewPort;
22
import org.gvsig.fmap.mapcontext.layers.FLayer;
23
import org.gvsig.fmap.mapcontext.layers.FLayers;
24
import org.gvsig.fmap.mapcontrol.MapControl;
25
import org.gvsig.raster.lib.buffer.api.Buffer;
26
import org.gvsig.raster.lib.buffer.api.BufferLocator;
27
import org.gvsig.raster.lib.buffer.api.BufferManager;
28
import org.gvsig.raster.lib.buffer.api.exceptions.BufferException;
29
import org.gvsig.raster.swing.buffer.RasterSwingBufferLocator;
30
import org.gvsig.raster.swing.buffer.RasterSwingBufferManager;
31
import org.gvsig.raster.swing.buffer.save.SaveBufferDialog;
32
import org.gvsig.raster.tools.swing.api.RasterToolsSwingLocator;
33
import org.gvsig.raster.tools.swing.api.RasterToolsSwingManager;
34
import org.gvsig.tools.locator.LocatorException;
35
import org.gvsig.tools.swing.api.ToolsSwingLocator;
36
import org.gvsig.tools.swing.api.ToolsSwingManager;
37

    
38
/**
39
 *
40
 * @author fdiaz
41
 *
42
 */
43
public class ExportViewToImageExtension extends Extension {
44

    
45
    private static final Logger logger = LoggerFactory.getLogger(ExportViewToImageExtension.class);
46
    private MapContext mapContext;
47

    
48
    @Override
49
    public void initialize() {
50
        IconThemeHelper.registerIcon("action", "view-export-image", this);
51
    }
52

    
53
    @Override
54
    public void execute(String actionCommand) {
55
        if (StringUtils.equalsIgnoreCase(actionCommand, "export-view-to-image")) {
56
            IView view = getActiveView();
57
            MapControl mapControl = view.getMapControl();
58
            mapContext = mapControl.getMapContext();
59
            ViewPort viewPort = mapControl.getViewPort();
60

    
61
            ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
62
            BufferedImage image = toolsSwingManager.createBufferedImage(viewPort.getImageWidth(), viewPort.getImageHeight(), BufferedImage.TYPE_3BYTE_BGR);
63

    
64
            Graphics2D g = image.createGraphics();
65

    
66
            try {
67
                mapContext.draw(image, g, null, mapContext.getScaleView());
68
            } catch (ReadException | MapContextException e2) {
69
                logger.warn("Can't draw mapContext.", e2);
70
            }
71

    
72
            Envelope envelope = viewPort.getAdjustedEnvelope();
73

    
74
            BufferManager bufferManager = BufferLocator.getBufferManager();
75
            Buffer buffer = null;
76
            try {
77
                buffer = bufferManager.createBufferFromAwtRaster(image.getRaster(), viewPort.getProjection(), envelope);
78
            } catch (IOException | BufferException e1) {
79
                logger.warn("Can't create buffer from view's image.", e1);
80
                return;
81
            }
82

    
83
            RasterSwingBufferManager rasterSwingBufferManager = RasterSwingBufferLocator.getSwingManager();
84
            SaveBufferDialog saveBufferDialog = rasterSwingBufferManager.createSaveBufferDialog(buffer);
85

    
86
            saveBufferDialog.showDialog(null);
87

    
88
        }
89
    }
90

    
91
    @Override
92
    public boolean isEnabled() {
93
        IView view = getActiveView();
94
        if (view != null) {
95
            ViewDocument viewDocument = view.getViewDocument();
96
            FLayers layers = viewDocument.getMapContext().getLayers();
97
            for (int i = 0; i < layers.getLayersCount(); i++) {
98
                FLayer layer = layers.getLayer(i);
99
                if (layer != null && layer.isAvailable()) {
100
                    return true;
101
                }
102
            }
103
        }
104
        return false;
105
    }
106

    
107
    @Override
108
    public boolean isVisible() {
109
        IView view = getActiveView();
110
        return (view != null);
111
    }
112

    
113
    private IView getActiveView() {
114
        ApplicationManager application = ApplicationLocator.getManager();
115
        IView view = (IView) application.getActiveComponent(ViewDocument.class);
116
        return view;
117
    }
118
}