【发布时间】:2017-08-02 19:12:13
【问题描述】:
我有一个网络程序,它使用ImageIO.write(..) 通过网络发送BufferedImages 流,这按预期工作,除了有时在另一端收到的图像将只是一系列小的黑白长方形,然后它最终会切换回发送实际图像。
我在任何地方都找不到任何帮助。
我使用的是 Java 版本 1.8.0_65,我这样发送图像:
BufferedImage capture = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
BufferedImage newImage = new BufferedImage(capture.getWidth(), capture.getHeight(), BufferedImage.TYPE_4BYTE_ABGR_PRE);
newImage.createGraphics().drawImage(capture, 0, 0, newImage.getWidth(), newImage.getHeight(), null);
capture = newImage;
BufferedImage difference = null;
if (lastImage != null) {
difference = getDifferenceImage(capture, lastImage);
} else {
difference = capture;
}
long generated = System.currentTimeMillis() - start;
ImageIO.write(difference, "png", socket.getOutputStream());
socket.getOutputStream().flush();
【问题讨论】:
-
你如何使用这个API? Java 版本是多少?
-
@RomanC 我更新了问题。
-
我不是 PNG 格式的专家,但据我所知(the Wikipedia page 似乎证实了这一点),图像阅读器无法知道最后的“块”何时遇到PNG图像。您需要告诉客户端要阅读多少;一种方法是将图像写入字节数组,然后将 int 写入指示字节数的套接字,然后将字节本身写入套接字。
标签: java image networking graphics render