Android Question Screenshot the content of Google Maps?


Active Member
Licensed User
Longtime User
Hi, I followed the Erel´s tutorial:

Google Maps Android v2 tutorial

And the map shows on the app, then I try To use this code to capture a picture of the map:

Sub GetMap
  Dim Obj1, Obj2 As Reflector
  Dim bmp As Bitmap
  Dim c As Canvas
  Obj1.Target = Obj1.GetActivityBA
  Obj1.Target = MapPanel
  bmp.InitializeMutable(MapPanel.Width, MapPanel.Height)
  Dim args(1) As Object
  Dim types(1) As String
  Obj2.Target = c
  Obj2.Target = Obj2.GetField("canvas")
  args(0) = Obj2.Target
  types(0) = ""
  Obj1.RunMethod4("draw", args, types)
  Dim Out As OutputStream
  Out = File.OpenOutput(File.DirDefaultExternal, "map.png", False)
  bmp.WriteToStream(Out, 100, "PNG")
End Sub

Taken from:

The problem is that the image it only has the Google's logo and the zoom buttons, but not the map.

Is there a better way to save a picture of the Google Maps?



Active Member
Licensed User
Longtime User
Wow, thanks, its really easy with GoogleMapsExtras.

For others looking for the code:

Sub Globals
Dim MapEx As GoogleMapsExtras
End Sub

Sub BtnSaveMap_Click
MapEx.Snapshot(gmap, "gmap")
End Sub

Sub gmap_SnapshotReady (Bitmap1 As Bitmap)
    If File.Exists(File.DirDefaultExternal, "map.png") Then File.Delete(File.DirDefaultExternal, "map.png")
    Dim out As OutputStream
    out = File.OpenOutput(File.DirDefaultExternal, "map.png", False)
    Bitmap1.WriteToStream(out, 100, "PNG")

End Sub

Only a question. This way you get the image Asyncronously, Is there a way to get the image Syncronously?

Upvote 0


Well-Known Member
Licensed User
Longtime User
I have Google Maps on a panel that has relevant info on both top and bottom of the Google Map view. It is sort of like a card with info for tourists. I would like to save this whole panel (containing both info as well as Google Maps) into a bitmap. I used the normal Canvas method to convert panel to bmp but the portion with Google Maps is blank. I guess I can use the Extras library to take a snapshot of Google Map but I would like to place this snapshot on to the previous screenshot of the panel so that it looks like a complete card with info on top and bottom of the Map.

Any idea how I can do this? Essentially I will have to copy the bitmap from Extras snapshot and layer it on top of the panel output bitmap.


You can do all this with Canvas object. Here is how.
  1. Save snapshot of the map using Extras library
  2. Take the snapshot of Panel using Canvas object
  3. Define a Rect with borders corresponding to the MapView
  4. Convert snapshot from step 1 to BitmapDrawable
  5. Using Canvas from step 2, perform Canvas.DrawDrawable with BitmapDrawable from step 5 to the Rect defined in step 3
  6. Save the Bitmap from Canvas with Canvas.Bitmap.WritetoStream
  7. Done
Last edited:
Upvote 0