私は1つのInputStream経由で画像を受信するソケットを持っていません。私はそのように大胆にイメージを送りたい。しかし、今度は画像が1枚の画像の遅延で受信されます(2枚目を送信した後の最初の画像、3枚目を送信した後の画像、....)。私は間違って何をしていますか?ソケットレシーブ遅延1の画像
サーバー
public static void readImages(InputStream stream) throws IOException {
stream = new BufferedInputStream(stream);
BufferedImage image = null;
int j = 0;
while (true) {
stream.mark(MAX_IMAGE_SIZE);
ImageInputStream imgStream = ImageIO.createImageInputStream(stream);
Iterator<ImageReader> i = ImageIO.getImageReaders(imgStream);
if (!i.hasNext()) {
System.out.println("No more image readers");
break;
}
ImageReader reader = i.next();
reader.setInput(imgStream);
image = reader.read(0);
ImageIO.write(image,"jpg",new File("current" + j + ".jpg"));
System.out.println("Save an image " + j);
if (image == null) {
System.out.println("Image is null");
break;
}
long bytesRead = imgStream.getStreamPosition();
stream.reset();
stream.skip(bytesRead);
j++;
}
}
クライアント
new Thread(new Runnable() {
@Override
public void run() {
try {
OutputStream outputStream = server.getOutputStream();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmapToSend = Bitmap.createScaledBitmap(bitmapToSend, 900, 800, true);
bitmapToSend.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
outputStream.write(byteArray);
outputStream.flush();
} catch (IOException e) {
System.out.println("Socket not created");
e.printStackTrace();
}
}
}).start();
注私は、クライアントの出力ストリームを閉じてはいけないので、私は絵のすべての時間を送ることができます。
あなたは第二または第三の画像を送信するためにどのようなコードを使用していますか? – greenapps
私はカメラで画像(bufferedImage)を撮影し、それをbitmapToSendに割り当てます。残りは「クライアント」スニペット –
ええ、すでにシアン化物の答えで実装されていますが、問題があります。私はそれを以下のコメントに入れました。 –