显示InputStream中的图像

时间:2013-03-03 23:38:26

标签: java android sockets android-imageview

我可以将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?如果有人帮助我,我会很高兴的!

2 个答案:

答案 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卡中获得新文件。