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 に答える