Gmap.Net сохранить изображение вокруг выбранного маркера - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть приложение с 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.

1 Ответ

0 голосов
/ 24 сентября 2019

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

Dim ThisMap As New Bitmap (Form2.myMap.Width, Form2.myMap.Height) Form2.myMap.DrawToBitmap (ThisMap, новый прямоугольник (0, 0, Form2.myMap).Ширина, 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
...