Java 有没有办法使用 Graphics2D API 在远程 Java 进程的屏幕上绘画? 是否有流式传输和反序列化绘画指令的 API?
或者我必须使用我自己的“api 调用”序列化/反序列化机制?
最佳答案
这实际上取决于您要处理的媒体类型。如果您正在播放视频,您正在使用的编解码器可能具有执行此操作的 API,但您需要四处搜索才能找到答案。 Graphics2D 实际上是为更原始的绘画操作而设计的,例如绘制形状、渲染文本和从一个地方到另一个地方复制图像数据。
如果您正在编写自己的流式算法,那么它可以像定义一个执行您需要的操作的 PaintEvent
类一样简单。 PaintEvent
类的想法是它包含要做什么的说明。例如,如果您在远程系统上用 radio 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
字段将被忽略。
无论如何,这是一种方法。然后你只需围绕它设计一个通信协议(protocol),将数据从一个地方获取到另一个地方。
关于Java Graphics2D 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475326/