Gmap.Net сохранить изображение вокруг выбранного маркера

У меня есть приложение с GMap.Net, показывающее различные маркеры. Я знаю, как сделать скриншот текущей карты и маркеров:

Dim sImageName As String = DateTime.Now.ToString(Format("yyyyMMdd-HHmmss")) & ".png"
Dim ThisMap As New Bitmap(Form2.myMap.Width, Form2.myMap.Height)
Form2.myMap.DrawToBitmap(ThisMap, New Rectangle(0, 0, Form2.myMap.Width, Form2.myMap.Height))
ThisMap.Save(sImagesFolder & sImageName)

Я хотел бы создать изображение для выбранного маркера. Вместо изображения всей карты, отображаемой на экране, оно будет центрироваться на маркере и показывать 100 пикселей в каждом направлении.

Кто-нибудь знает как это сделать?

Это то, что я пробовал, но это дает мне пустое изображение - ничего не появляется. Я чувствую, что это должно работать...

Private Sub MyMap_OnMarkerClick(item As GMapMarker, e As Windows.Forms.MouseEventArgs) Handles myMap.OnMarkerClick

  SelMarkerX = e.X
  SelMarkerY = e.Y

  Dim sImageName As String = DateTime.Now.ToString(Format("yyyyMMdd-HHmmss")) & ".png"
  Dim ThisMap As New Bitmap(140,100)
  myMap.DrawToBitmap(ThisMap, New Rectangle(SelMarkerX - 70, SelMarkerY - 50, 140, 100))
  ThisMap.Save(sImagesFolder & sImageName)

End Sub

Я просто не понимаю. Если я напишу:

myMap.DrawToBitmap(ThisMap, New Rectangle(0, 0, 140, 100)

то я получаю то, что вы могли ожидать. Я получаю верхний левый угол существующей карты от 0 до 140 по горизонтали и от 0 до 100 по вертикали. Если я изменю это на это:

myMap.DrawToBitmap(ThisMap, New Rectangle(10, 0, 140, 100)

тогда я получаю от 0 до 130 по горизонтали, а не от 10 до 140.


person Elwood472    schedule 20.09.2019    source источник


Ответы (1)


Ну, я не мог понять, как это сделать с помощью Gmap, поэтому мне было интересно, могу ли я обрезать его вне Gmap, и, по-видимому, это распространено. Вот код, который я использовал.

Dim ThisMap As New Bitmap(Form2.myMap.Width, Form2.myMap.Height) Form2.myMap.DrawToBitmap(ThisMap, New Rectangle(0, 0, Form2.myMap.Width, Form2.myMap.Height)) ThisMap.Save( sImagesFolder и sImageName)

    Dim LocX = SelMarkerX - 160 'x cord. of where crop starts
    Dim LocY = SelMarkerY - 120 'y  cord. of where crop starts
    Dim CropW = 320 'Crop width
    Dim CropH = 240 'Crop height
    Dim CropRect As New Rectangle(LocX, LocY, CropW, CropH)

    Dim OriginalImage = ThisMap
    Dim CropImage = New Bitmap(CropRect.Width, CropRect.Height)
    Using grp = Graphics.FromImage(CropImage)
        grp.DrawImage(OriginalImage, New Rectangle(0, 0, CropRect.Width, CropRect.Height), CropRect, GraphicsUnit.Pixel)
        CropImage.Save(sImagesFolder & sImageName)
    End Using
person Elwood472    schedule 24.09.2019