需要存储缓冲值并生成图像并在单击保存按钮时存储该图像

时间:2015-10-02 01:35:28

标签: java drag-and-drop save transfer scribble

我需要在单击保存按钮时提供文件名,并且我获得了scribbledraganddrop的一些代码,我想为此代码实现保存按钮选项,但无法找到我应该在其中使用的bufferedimage / buffered值imageIO.write作为输入流。

JFileChooser save = new JFileChooser();
        int option = save.showSaveDialog(frame);
        if (option == JFileChooser.APPROVE_OPTION) {
            try {

                System.out.println(Arrays.toString(Scribble.supportedFlavors));
                //InputStream in = new ByteArrayInputStream(Scribble.supportedFlavors);  // not working??
                //System.out.println(scribbles.toString());
                //BufferedImage awtImage = ImageIO.read(in);
                BufferedImage awtImage = new BufferedImage(frame.getWidth(),frame.getHeight(),BufferedImage.TYPE_INT_RGB);
                File selected = save.getSelectedFile();
                //System.out.println(in);
                frame.paint(awtImage.getGraphics());
                try {
                    ImageIO.write(awtImage, "png", selected);
                    System.out.println("panel saved as image at: " + selected.getPath());
                } catch (Exception evt) {
                    System.out.println("panel not saved" + evt.getMessage());
                }

            } catch (Exception ex) { // again, catch any exceptions and...
                System.out.println(ex.getMessage());
            }
        }

我的整个代码可以在这里找到:https://github.com/mitshine/scribbledraganddrop/issues/1 Transferhandle在这里实现的地方如下:

  //====== The following methods implement the Transferable interface =====

  // This is the custom DataFlavor for Scribble objects
  public static DataFlavor scribbleDataFlavor = new DataFlavor(
      Scribble.class, "Scribble");

  // This is a list of the flavors we know how to work with
  public static DataFlavor[] supportedFlavors = { scribbleDataFlavor,
      DataFlavor.stringFlavor };

  /** Return the data formats or "flavors" we know how to transfer */
  public DataFlavor[] getTransferDataFlavors() {
    return (DataFlavor[]) supportedFlavors.clone();
  }

  /** Check whether we support a given flavor */
  public boolean isDataFlavorSupported(DataFlavor flavor) {
    return (flavor.equals(scribbleDataFlavor) || flavor
        .equals(DataFlavor.stringFlavor));
  }

  /**
   * Return the scribble data in the requested format, or throw an exception
   * if we don't support the requested format
   */
  public Object getTransferData(DataFlavor flavor)
      throws UnsupportedFlavorException {
    if (flavor.equals(scribbleDataFlavor)) {
      return this;
    } else if (flavor.equals(DataFlavor.stringFlavor)) {
      return toString();
    } else
      throw new UnsupportedFlavorException(flavor);
  }

0 个答案:

没有答案