繁体   English   中英

Java使用ImageIO通过网络发送图像

[英]Java sending image through network with ImageIO

我有一个网络程序,该网络程序使用ImageIO.write(..)通过网络发送BufferedImage的流,此操作按预期工作,但有时在另一端收到的Image只是一系列小的黑白方块在很长一段时间内,它最终将切换回发送实际图像。

我在任何地方都找不到任何帮助。

我使用的是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();

尝试此代码可能会有所帮助。

public byte[] getCustomImageInBytes(BufferedImage originalImage) {
    byte[] imageInByte = null;
    try {
        // convert BufferedImage to byte array
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(originalImage, "png", baos);
        baos.flush();
        imageInByte = baos.toByteArray();
        baos.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return imageInByte;
}

socket.getOutputStream().write(getCustomImageInBytes(difference));
socket.getOutputStream().flush();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM