我可以将Android手机中的字符串发送到我的电脑,反之亦然。但是,我想从我的电脑发送图像并将其显示到手机上。在我的情况下,计算机是服务器,移动电话是客户端。
这是我服务器端代码的一部分:
socket = serverSocket.accept();
dataOutputStream = new DataOutputStream(socket.getOutputStream());
captureScreen("C:\\Users\\HP\\Desktop\\capture.png");
File f = new File("C:\\Users\\HP\\Desktop\\capture.png");
byte [] buffer = new byte[(int)f.length()];
dataOutputStream.write(buffer,0,buffer.length);
dataOutputStream.flush();
请注意,captureScreen()
是一种成功截取服务器屏幕截图并将其保存为上述路径中的.PNG图像的方法。
现在,在Android手机的客户端,如果我有一个ImageView
控件,如何以InputStream
的形式读取从计算机发送的图像,并将其显示在{ImageView
上1}}?
此外,我是否成功将图像写入dataOutputStream
?如果有人帮助我,我会很高兴的!
答案 0 :(得分:1)
您可以调用ImageView的setImageBitmap(Bitmap bm)
。
http://developer.android.com/reference/android/widget/ImageView.html
如何将图像数据提供给客户端:它取决于您选择的解决方案,但从技术上讲,您可以使用与纯Java相同的库。
您可以使用android.graphics.BitmapFactory
从流中创建Bitmap
。
http://developer.android.com/reference/android/graphics/BitmapFactory.html
Bitmap bitmap1 = BitmapFactory.decodeStream(inputStream);
Bitmap bitmap2 = BitmapFactory.decodeFile(filename);
答案 1 :(得分:1)
byte [] buffer = new byte[(int)f.length()];
dataOutputStream.write(buffer,0,buffer.length);
您刚刚声明了缓冲区字节数组的大小,但它是空的! 您应该将文件转换为byte,然后将其传输到OutputStream,如下所示:
byte[] buffer = System.IO.File.ReadAllBytes("C:\\Users\\HP\\Desktop\\capture.png");
(c#的代码) 而且你将像你一样发送它:
dataOutputStream.write(buffer,0,buffer.length);
dataOutputStream.flush();
尝试接收文件:
public void fileReceived(InputStream is)
throws FileNotFoundException, IOException {
Log.i("IMSERVICE", "FILERECCC-1");
if (is!= null) {
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
fos = new FileOutputStream("/sdcard/chats/gas1.jpg/");
bos = new BufferedOutputStream(fos);
byte[] aByte = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(aByte)) != -1) {
bos.write(aByte, 0, bytesRead);
}
bos.flush();
bos.close();
Log.i("IMSERVICE", "FILERECCC-2");
} catch (IOException ex) {
// Do exception handling
}
}
}
}
所以你将在Android上的SD卡中获得新文件。