Потоковое Java Graphics2D? - PullRequest
       13

Потоковое Java Graphics2D?

2 голосов
/ 19 сентября 2011

Есть ли способ в Java использовать API Graphics2D для рисования на экране удаленного процесса Java? Любой API для потоковой передачи и десериализации инструкций по рисованию?

Или я должен использовать свой собственный механизм сериализации / десериализации "вызов API"?

1 Ответ

2 голосов
/ 19 сентября 2011

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

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

Я думаю, что класс PaintEvent будет выглядеть примерно так:

public class PaintEvent {
  public static final int OPER_DRAW_CIRCLE = 0;
  public static final int OPER_DRAW_RECT   = 1;
  public static final int OPER_DRAW_TEXT   = 2;
  ...etc...

  int paintOperationID;
  int[] paintDetails;           // where 'paintDetails' contains data such as a circle's radius, a rectangle's dimensions, the (x, y) location where to render text, etc.
  java.awt.Color renderColor;
  String text;

  public PaintEvent(int paintOperationID, int[] paintDetails, Color renderColor, String text) {
     ...
  }

}

Таким образом, в зависимости от значения paintOperationID данные в paintDetails будут обрабатываться по-разному. И если это не операция OPER_DRAW_TEXT, поле text будет просто игнорироваться.

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

...