Gmap.Net 保存选定标记周围的图像
Gmap.Net save image around selected marker
我有一个 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。
好吧,我不知道如何用 Gmap 做到这一点,所以我想知道我是否可以在 Gmap 之外裁剪它,显然这很常见。这是我使用的代码。
Dim ThisMap As New Bitmap(Form2.myMap.Width, Form2.myMap.Height)
Form2.myMap.DrawToBitmap(ThisMap, 新矩形(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
我有一个 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。
好吧,我不知道如何用 Gmap 做到这一点,所以我想知道我是否可以在 Gmap 之外裁剪它,显然这很常见。这是我使用的代码。
Dim ThisMap As New Bitmap(Form2.myMap.Width, Form2.myMap.Height) Form2.myMap.DrawToBitmap(ThisMap, 新矩形(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