синхронизировать рисование в C #? - PullRequest
0 голосов
/ 27 января 2012

Я думаю о создании небольшой программы, в которой у двух пользователей будет холст для рисования, и на котором они смогут рисовать через Интернет, и изображение будет синхронизировано.если бы я нарисовал линию ... пользователь на другом компьютере сразу увидел бы это.

Я надеялся, что у некоторых из вас может быть какой-либо совет или документация, или предложение о том, как я могу достичь чего-то подобного.

Лично ... я думал об использовании сервера sql, нашел способ нарисовать и сохранить изображение .. и преобразовать его в байты .. сохранить его в базе данных и постоянно загружать изображение, но это моглоубить сервер.

Кстати ... это приложение Windows Forms

Ответы [ 2 ]

0 голосов
/ 28 января 2012

Socket.IO для Node.js было бы хорошим решением для этого.С Socket.IO нет необходимости опрашивать базу данных или сохранять данные в любой форме.Каждый раз, когда пользователь что-то рисует, вы хотите отправить данные холста на сервер, а затем сервер немедленно отправит их клиенту.

Для области рисования, которую вы хотите использовать HTML5 canvas. Здесь есть хороший учебник здесь о том, как настроить базовый холст для рисования.

Если вы используете ASP.NET MVC, Джон Галлауэй опубликовал статья в его блоге о том, как начать работу с Node.

0 голосов
/ 28 января 2012

У вас не будет пропускной способности для быстрой передачи всего изображения.

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

Лучшее, что можно сделать, - это определить инструменты и захватить пользовательский ввод, а затем передать пользовательские действия с отметками времени, чтобы отслеживать, кто что сделал первым. Например, если вы используете инструмент «Перо» и перетаскиваете его по экрану, чтобы создать линию, вы захотите передать такую ​​информацию, как:

  • Пользователь
  • Штамп с датой и временем
  • Инструмент (ручка / кисть / и т. Д.)
  • Цвет
  • Массив точек от того места, где они начали, до места, где они прекратили рисовать

Это действие затем может быть воссоздано на другом клиенте (ах).

Если вы хотите сделать что-то подобное, сначала убедитесь, что вы делаете клиентский код / ​​однопользовательский код. Если у вас еще нет приложения для рисования на холсте, не забегайте вперед с сетевой частью. Просто спроектируйте его так, чтобы каждое действие могло быть сведено к данным, как показано выше. Таким образом, у вас будут данные, необходимые для передачи и воспроизведения действия.

...