0

我正在制作一个用于从网络上的任何其他 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 压缩图像以通过网络发送是好的,它会加速这个过程。还是我应该使用其他方法。

4

1 回答 1

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面板上的方法。当然,该面板之前已实例化并添加到容器中。

于 2012-09-11T14:24:06.370 回答