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 @ 8852

History | View | Annotate | Download (4.5 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.dispose.DisposeUtils;
35
import org.gvsig.tools.locator.LocatorException;
36
import org.gvsig.tools.swing.api.ToolsSwingLocator;
37
import org.gvsig.tools.swing.api.ToolsSwingManager;
38

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

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

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

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

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

    
65
            Graphics2D g = image.createGraphics();
66

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

    
73
            Envelope envelope = viewPort.getAdjustedEnvelope();
74

    
75
            BufferManager bufferManager = BufferLocator.getBufferManager();
76
            Buffer buffer = null;
77
            try {
78
                buffer = bufferManager.createBufferFromAwtRaster(image.getRaster(), viewPort.getProjection(), envelope);
79
                RasterSwingBufferManager rasterSwingBufferManager = RasterSwingBufferLocator.getSwingManager();
80
                SaveBufferDialog saveBufferDialog = rasterSwingBufferManager.createSaveBufferDialog(buffer);
81

    
82
                saveBufferDialog.showDialog(null);
83
            } catch (IOException | BufferException e1) {
84
                logger.warn("Can't create buffer from view's image.", e1);
85
                return;
86
            } finally {
87
                DisposeUtils.disposeQuietly(buffer);
88
            }
89
        }
90
    }
91

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

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

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