发送屏幕图像并持续显示

时间:2012-09-11 14:17:09

标签: java image networking

我正在制作一个从网络上的任何其他PC控制PC的项目。 但是当我将图像从服务器发送到客户端时,它不会改变,只显示第一个图像。 所以我使用GZIP压缩将捕获的服务器映像发送到客户端。

这是服务器代码:

out = new DataOutputStream(s.getOutputStream());
zipout = new GZIPOutputStream(out);
while(true)
{
img = conn.getScreenImg(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
//Here conn is a Object of Robot Class
ImageIO.write(img, "jpeg", zipout);
Thread.sleep(200);
System.out.println("Success");
}

客户端代码:显示服务器发送的图像。

while(true)
{
try 
{
img = ImageIO.read(zipin);
Graphics g = this.getGraphics();
g.drawImage(img, 0, 0, this);
Thread.sleep(100);
} 
catch (Exception e) 
{
e.printStackTrace();
}
}

我需要帮助。客户端上的图像不会更改。 我想知道如果在这里使用GZIP压缩图像以通过网络发送是好的,它会加速这个过程。或者我应该使用其他方法。

1 个答案:

答案 0 :(得分:0)

您在客户端上显示图像的方式对我来说似乎不对。编写一个自定义JPanel来覆盖paintComponent方法并处理图像渲染会更好。如下所示:

  class ImagePanel extends JPanel {

    private BufferedImage image = null;

    private void setImage(BufferedImage img) {
      image = img;
      repaint();
    }

    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      if (image != null) {
        g2.drawImage(image, 0, 0, null);
      }
    }    
  }

while循环中,您可以在面板上调用setImage方法。该小组当然先前已实例化并添加到容器中。