/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.studio.components.map.plugins.snapshot; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Image; import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.UUID; import javax.imageio.ImageIO; import javax.swing.JPanel; import javax.swing.JScrollPane; import com.opendoorlogistics.api.components.ComponentControlLauncherApi; import com.opendoorlogistics.api.tables.ODLTime; import com.opendoorlogistics.api.ui.Disposable; import com.opendoorlogistics.core.utils.images.ImageUtils; import com.opendoorlogistics.core.utils.strings.Strings; final public class ProcessCreateImage { public static void process(BufferedImage image, ExportImageConfig config, ComponentControlLauncherApi controlLauncher) { if (config.isToClipboard()) { class ImageTransferable implements Transferable { private Image image; public ImageTransferable(Image image) { this.image = image; } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { if (isDataFlavorSupported(flavor)) { return image; } else { throw new UnsupportedFlavorException(flavor); } } public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor == DataFlavor.imageFlavor; } public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { DataFlavor.imageFlavor }; } } ImageTransferable transferable = new ImageTransferable( image ); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(transferable, null); } if (config.isToFile() && Strings.isEmptyWhenStandardised(config.getFilename())==false) { File outputfile = new File(config.getFilename()); try { ImageIO.write(image, config.getImageType().name().toLowerCase(), outputfile); } catch (IOException e1) { throw new RuntimeException(e1); } } if(config.isToViewer() && controlLauncher!=null){ String title = "Snapshot " + new ODLTime().toString(); JPanel imgPanel = ImageUtils.createImagePanel(image, Color.WHITE); class MyPanel extends JPanel implements Disposable{ @Override public void dispose() { // TODO Auto-generated method stub } } MyPanel panel = new MyPanel(); panel.setLayout(new BorderLayout()); panel.add(new JScrollPane(imgPanel), BorderLayout.CENTER); // don't make the panel too big if the image is huge int buffer =10; int maxSize = 400 + buffer; Dimension prefSize = new Dimension(Math.min(image.getWidth() + buffer, maxSize), Math.min(image.getHeight()+ buffer,maxSize)); panel.setPreferredSize(prefSize); controlLauncher.registerPanel(UUID.randomUUID().toString(), title,panel , false); } } }