-1
PCからAndroid Appにテキストを送信し、同じソケットで画像データを送信したいと思います。私はこれをBase64でエンコードしようとしていますが、最後にはpitureが壊れています。 私のコードは次のようになります。BufferWriterとBufferReaderを使用してTCPソケットで画像を送信
データ画面を取得します。
public static byte[] getScreen()
{
BufferedImage imagebuf = null;
try {
imagebuf = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
} catch (HeadlessException | AWTException e) {
System.err.println("Can't get screen.");
return null;
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] imageInByte;
try {
ImageIO.write(imagebuf, "jpg", baos);
baos.flush();
} catch (IOException e) {
e.printStackTrace();
return null;
}
finally {
imageInByte = baos.toByteArray();
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return imageInByte;
}
はその後ソケットでデータを送信します。
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
List<ScreenBuffor> screenList = ScreenBuffor.getScreenList();//Place where I keep all screen data with names
if(!screenList.isEmpty())
{
for(ScreenBuffor screen : screenList)
{ bufferedWriter.write(InformationCommunicate.screenData);
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedWriter.write(screen.getNameScreen());
bufferedWriter.newLine();
bufferedWriter.flush();
String image = Base64.getEncoder().encodeToString(screen.getDataScreen());
char[] imageCharacter = image.toCharArray();
int sizeArray = imageCharacter.length;
bufferedWriter.write(String.valueOf(sizeArray));
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedWriter.write(imageCharacter, 0, sizeArray);
bufferedWriter.flush();
}
}
とAndroid上でこの画像データを読み込み、保存:
InputStream input = clientSocket.getInputStream();
InputStreamReader isr = new InputStreamReader(input, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String lineCharacter = reader.readLine();
if(lineCharacter.equals(InformationCommunicate.screenData))
{
lineCharacter = reader.readLine();
Log.i("PictureSave", "Image name: " + lineCharacter);
nameScreen = new String(lineCharacter);
lineCharacter = reader.readLine();
Log.i("PictureSave", "Buffor Size: " + lineCharacter);
int lengthBuf = Integer.parseInt(lineCharacter);
char[] screenCharBuff = new char[lengthBuf];
for(int i = 0; i < lengthBuf; i++)
{
int onecharacter = reader.read();
if((int) onecharacter == -1)
throw new IllegalStateException("Image data is Incomplete");
screenCharBuff[i] = (char) onecharacter;
}
String imageString = new String (screenCharBuff);
byte[] imageData = imageString.getBytes();
File photo=new File(Environment.getExternalStorageDirectory(), "Picture" + lengthBuf + ".jpg");
try {
FileOutputStream fos=new FileOutputStream(photo.getPath());
fos.write(imageData);
fos.close();
}
catch (java.io.IOException e) {
Log.e("PictureSave", "Exception in photoCallback", e);
}
画像は保存しているが、私が書いたように、壊れていて、私はそれを開くことができません。助けてください。
あなたは絶対に正しいです。私はバイト[]データを忘れてしまった。今それは動作します。このアドバイスをありがとう、私はあなたにビールを借りています。 :) – sQanns