Skip to content

Take Screenshot

View on GitHubSample viewer app

Take a screenshot of the map.

Image of take screenshot

How to use the sample

Click the "Take Screenshot" button to export the image. In the file chooser that opens, set a file name and location to save the image.

How it works

  1. Call mapView.exportImageAsync() and set it to a ListenableFuture<Bitmap>.
  2. On done, call get() on the ListenableFuture<Image> and save it to the device.

Relevant API

  • ArcGISMap
  • MapView

Tags

capture, export, image, print, screen capture, screenshot, share, shot

Sample Code

TakeScreenshotSample.java
Use dark colors for code blocksCopy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 /*  * Copyright 2017 Esri.  *  * Licensed under the Apache License, Version 2.0 (the "License"); you may not  * use this file except in compliance with the License. You may obtain a copy of  * the License at  *  * http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the  * License for the specific language governing permissions and limitations under  * the License.  */  package com.esri.samples.take_screenshot;  import javax.imageio.ImageIO;  import java.io.File;  import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.esri.arcgisruntime.concurrent.ListenableFuture; import com.esri.arcgisruntime.mapping.ArcGISMap; import com.esri.arcgisruntime.mapping.BasemapStyle; import com.esri.arcgisruntime.mapping.view.MapView; import javafx.application.Application; import javafx.embed.swing.SwingFXUtils; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.image.Image; import javafx.scene.layout.StackPane; import javafx.stage.FileChooser; import javafx.stage.Stage;  public class TakeScreenshotSample extends Application {   private MapView mapView;   @Override  public void start(Stage stage) {   try {  // create stack pane and application scene  StackPane stackPane = new StackPane();  Scene scene = new Scene(stackPane);   // set title, size, and add scene to stage  stage.setTitle("Take Screenshot Sample");  stage.setWidth(800);  stage.setHeight(700);  stage.setScene(scene);  stage.show();   // authentication with an API key or named user is required to access basemaps and other location services  String yourAPIKey = System.getProperty("apiKey");  ArcGISRuntimeEnvironment.setApiKey(yourAPIKey);   // create map with the streets basemap style  ArcGISMap map = new ArcGISMap(BasemapStyle.ARCGIS_STREETS);   // create a map view and set the map to it  mapView = new MapView();  mapView.setMap(map);   // create a file chooser for saving image  final FileChooser fileChooser = new FileChooser();  fileChooser.setInitialFileName("map-screenshot");  fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("PNG file (*.png)", "*.png"));   // create button to take screen shot  Button screenShotButton = new Button("Take Screenshot");   screenShotButton.setOnAction(e -> {  // export image from map view  ListenableFuture<Image> mapImage = mapView.exportImageAsync();  mapImage.addDoneListener(() -> {  try {  // get image  Image image = mapImage.get();  // choose a location to save the file  File file = fileChooser.showSaveDialog(stage);  if (file != null) {  // write the image to the save location  ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", file);  }  } catch (Exception ex) {  ex.printStackTrace();  }  });  });   // add the map view to stack pane  stackPane.getChildren().addAll(mapView, screenShotButton);  StackPane.setAlignment(screenShotButton, Pos.BOTTOM_CENTER);  StackPane.setMargin(screenShotButton, new Insets(0, 0, 100, 0));  } catch (Exception e) {  // on any error, display the stack trace.  e.printStackTrace();  }  }   /**  * Stops and releases all resources used in application.  */  @Override  public void stop() {   if (mapView != null) {  mapView.dispose();  }  }   /**  * Opens and runs application.  *  * @param args arguments passed to this application  */  public static void main(String[] args) {   Application.launch(args);  }  }

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.