Сделайте http-запрос с локального устройства, используя DialogFlow

Вам нужно иметь два вызова рисования:

  • Один для неустойчивой строки, которая следует за курсором в MouseMove, используя someControls.CreateGraphics
  • , другой для сохраняющейся строки, запускаемой в MouseUp, где вы храните координаты и вызываете Invalidate на свой элемент управления холстом и рисуете в Paint событие вашего холста, используя его объект e.Graphics.

Вот минимальный пример кода:

List<Point> allPoints = new List<Point>();
Point mDown = Point.Empty;

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    mDown = e.Location;
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    allPoints.Add(e.Location);
    pictureBox1.Invalidate();
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button.HasFlag(MouseButtons.Left))
    {
        pictureBox1.Refresh();
        using (Graphics G = pictureBox1.CreateGraphics())
            G.DrawLine(Pens.Red, mDown, e.Location);
    }
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    if (allPoints.Count > 1) e.Graphics.DrawLines(Pens.Black, allPoints.ToArray());
}

Обратите внимание, что в качестве управления холстом используется PictureBox. Это контроль, предназначенный для такого взаимодействия. Ваш код, кажется, рисует на рабочий стол, который не принадлежит вам. Рисование на нем в постоянном порядке не похоже на то, что вы сделали бы с приложением Paint Paint.

Также обратите внимание, что мой пример хранит список точек и рисует их как одну незамкнутую полилинию. Чтобы сделать их закрытым обменом DrawLines для DrawPolygon! Чтобы нарисовать несколько таких полилиний или полигонов, вам нужно ...

  • .. принять решение о пользовательском интерфейсе для него, возможно добавить точки сегмента только при нажатии клавиши управления и в противном случае завершить текущую полилинию
  • сохраняют точки в List<List, Point>>

Также обратите внимание, что это один из редких примеров, в которых используется control.CreateGraphics, поскольку вы на самом деле требуется не-постоянный рисунок, когда пользователь перемещает мышь.

В большинстве других случаев применяется основное правило № 1 для Winforms:

Никогда не используйте control.CreateGraphics! Никогда не пытайтесь кэшировать объект Graphics! Либо вставьте Bitmap bmp, используя Graphics g = Graphics.FromImage(bmp) или в Paint событие элемента управления, используя параметр e.Graphics ..

0
задан sai.raj 31 March 2019 в 13:48
поделиться

1 ответ

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

  1. Создайте свое действие с помощью Dialogflow и добавьте выполнение в сети
  2. Добавьте способ отправки какого-либо уведомления на ваше локальное устройство
    • Это может прослушивать базу данных, опросы, push-уведомления и т. д.
  3. Когда ваше устройство получает это уведомление, оно выполняет действие локально
  4. Если вы хотите, чтобы этот ответ локального действия был отправлен обратно, вы можете обновить webhook через ответ HTTP (если выполнение HTTP-вызова) или обновление поля в облачной базе данных.
    • Действия имеют время ожидания около 5 секунд, чтобы получить ответ, поэтому имейте в виду этот предел, если вы хотите сделать это
0
ответ дан Nick Felker 31 March 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: