Повернуть маркер Gmap (растровое изображение) на любую степень в C# - PullRequest
0 голосов
/ 28 февраля 2020

Я использую GMaps для использования карт Google на c#. Я записываю значения широты и долготы и нажимаю кнопку загрузки. Затем код ставит маркер (как стрелка) этой точки. Я хочу повернуть этот маркер для любой степени, как карты Google ». У меня нет датчиков, поэтому я могу написать степень в текстовом поле и нажать кнопку поворота. Как я могу это сделать? Этот код показывает, как я создаю маркеры и помещаю их в свою карту. Я немного знаю растровое изображение, но не слишком, и извините за мой плохой английский sh. Я надеюсь, вы поймете, что я хочу.

       `double lat = Convert.ToDouble(txtLat.Text);
        double lng = Convert.ToDouble(txtLong.Text);
        map.Position = new PointLatLng(lat, lng);
        //custom marker
        Bitmap bmpMarker = (Bitmap)Image.FromFile("img/arrow.png");
        PointLatLng point = new PointLatLng(lat, lng);

        GMap.NET.WindowsForms.GMapMarker marker = new GMarkerGoogle(point, bmpMarker);
        //1. Create a Overlay
        GMapOverlay markers = new GMapOverlay("markers");
        map.ZoomAndCenterMarkers("markers");
        //2. Add all available markers to that Overlay
        markers.Markers.Add(marker);
        //3. Cover map with Overlay
        map.Overlays.Add(markers);
        //RotateImage(bmpMarker, 180.0f);
        marker.ToolTipText = map.Position.ToString();`

1 Ответ

1 голос
/ 28 февраля 2020

Попробуйте снова установить растровое изображение с поворотом, поскольку оно не является ссылочным типом:

GMap.NET.WindowsForms.GMapMarker marker = new GMarkerGoogle(point, RotateImg(bmpMarker,45));

Предложение повернуть растровое изображение:

public Bitmap RotateImg(Bitmap bmpimage, float angle)
{
    int w = bmpimage.Width;
    int h = bmpimage.Height;
    PixelFormat pf;
    pf = bmpimage.PixelFormat;
    Bitmap tempImg = new Bitmap(w, h, pf);
    Graphics g = Graphics.FromImage(tempImg);
    g.DrawImageUnscaled(bmpimage, 1, 1);
    g.Dispose();
    GraphicsPath path = new GraphicsPath();
    path.AddRectangle(new RectangleF(0.0F, 0.0F, w, h));
    Matrix mtrx = new Matrix();

    mtrx.Rotate(angle);
    RectangleF rct = path.GetBounds(mtrx);
    Bitmap newImg = new Bitmap(Convert.ToInt32(rct.Width), Convert.ToInt32(rct.Height), pf);
    g = Graphics.FromImage(newImg);
    g.TranslateTransform(-rct.X, -rct.Y);
    g.RotateTransform(angle);
    g.InterpolationMode = InterpolationMode.HighQualityBilinear;
    g.DrawImageUnscaled(tempImg, 0, 0);
    g.Dispose();
    tempImg.Dispose();
    return newImg;
}
...