Рисование круга на картинке из другой winform - PullRequest
0 голосов
/ 06 июня 2019

В моем приложении две формы win. В одной из форм есть изображение с загруженным jpg нашего плана здания. Основная форма имеет код, который делает распознавание лиц, идентифицирующих людей, приходящих в определенные области. Меня попросили изменить эту программу, чтобы показать местоположение определенного лица на плане здания. У меня есть база данных, в которой есть все координаты X, Y местоположений, которые должны отображаться на изображение плана здания. Я осмотрелся вокруг и попытался найти какой-нибудь код, который нарисует круг на карте в координатах X, Y, когда человек продвигается по областям здания, стирая все существующие круги и обновляя этот новый. Поэтому на форме карты я вставил следующий код:

public void DrawCircle(int x, int y)
    {
        Graphics gf = pictureBox1.CreateGraphics();
        gf.DrawEllipse(new Pen(Color.Red), new Rectangle(x, y, 400, 400));
        pictureBox1.Refresh();
    }

Затем из метода обновления (сейчас нажатие кнопки для тестирования) в главной форме я вызываю этот метод в форме карты. Метод вызывается, но круг не отображается в форме. Я пробовал и Обновить, и Неправильный, и ни один из методов не рисует круг на изображении.

Я не занимался разработкой winforms в течение многих лет, так что я уверен, что где-то не хватает сантехники. Вот код на главной форме:

LocationMap map = new LocationMap();

public Form1()
{
    InitializeComponent();
    //set up signalR
    UserName = "MovementHub1";
    ConnectAsync();
    //show the map screen
    map.Show();
    map.WindowState = FormWindowState.Maximized;
    ...

Затем в событии щелчка (для тестирования прямо сейчас) у меня есть этот код:

private void button2_Click(object sender, EventArgs e)
    {
        map.DrawCircle(340, 258);
    }

Как только я получу круг, нарисованный в другой форме, я удалю код из события щелчка и перенесу его в другое событие, которое выполняет обновление местоположения. Если это возможно, я хотел бы поставить ярлык рядом с именем человека. Сейчас это подтверждение концепции, мне просто нужна помощь, чтобы начать круг с формы.

Спасибо.

1 Ответ

0 голосов
/ 06 июня 2019

Я попробовал это сам и придумал, что:

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StackoverflowHelp
{
  public partial class Form1 : Form
  {
    Form2 form = new Form2();

    public Form1()
    {
      InitializeComponent();
      form.Show();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      form.DrawCircle(100, 100);
    }
  }
}

Form2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StackoverflowHelp
{
  public partial class Form2 : Form
  {
    public Form2()
    {
      InitializeComponent();

      DrawCircle(10, 10);
    }

    public void DrawCircle(int x, int y)
    {
      Graphics gf = Graphics.FromImage(pictureBox1.Image);
      gf.DrawEllipse(new Pen(Color.Red), new Rectangle(x, y, 20, 20));
      gf.Dispose();
      pictureBox1.Refresh();
      pictureBox1.Invalidate();
      pictureBox1.Update();
    }
  }
}

Вместо вызова CreateGraphics() в графическом окне я создал графический объект с использованием текущего изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...