Это действительно зависит от типа СМИ, с которым вы имеете дело. Если вы воспроизводите видео, кодек, который вы используете, может иметь 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
будет просто игнорироваться.
В любом случае, это один из способов сделать это. Затем вы просто разрабатываете протокол связи для передачи данных из одного места в другое.