2017-03-12 19 views
0

ImageIO.write(..)を使用してBufferedImageのストリームをネットワーク経由で送信するネットワークプログラムがあります。これは、時には別の端末で受信された画像とは別に、黒と白の四角形を長時間放置すると、最終的に実際の画像を送信するように切り替わります。ImageIOを使用してネットワーク経由で画像を送信するJava

どこでもこのヘルプが見つかりません。

私は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(); 
+1

このAPIをどのように使用しますか? Javaのバージョンは何ですか? –

+0

@RomanC質問を更新しました。 –

+0

私はPNG形式の専門家ではありませんが、私が知っているところでは(Wikipediaのページ(https://en.wikipedia.org/wiki/Portable_Network_Graphics)はこれを確認しているようです)、 PNG画像の最終的な「チャンク」がいつ遭遇するかを知るために使用される。あなたはクライアント側にどれくらい読むべきかを伝える必要があります。バイト配列にイメージを書き込んだ後、バイト数を示すintをソケットに書き込んだ後、バイト自体をソケットに書き込みます。 – VGR

答えて

0

は、このコードは、それはあなたを助けるかもしれ試してみてください。

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(); 
関連する問題