2

我可以将字符串从我的 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

此外,我是否成功地将图像写入dataOutputStream?如果有人帮助我,我会很高兴!

4

2 回答 2

3

你可以调用setImageBitmap(Bitmap bm)你的 ImageView。

http://developer.android.com/reference/android/widget/ImageView.html

如何将图像数据提供给客户端:这取决于您选择的解决方案,但从技术上讲,您可以使用与纯 Java 相同的库。

您可以使用android.graphics.BitmapFactoryBitmap从您的流中创建。

http://developer.android.com/reference/android/graphics/BitmapFactory.html

Bitmap bitmap1 = BitmapFactory.decodeStream(inputStream);
Bitmap bitmap2 = BitmapFactory.decodeFile(filename);
于 2013-03-03T23:45:38.747 回答
1

这是什么 ?

    byte [] buffer = new byte[(int)f.length()];
    dataOutputStream.write(buffer,0,buffer.length);

您刚刚声明了缓冲区字节数组的大小,但它是空的!您应该将文件转换为字节,然后将其传输到 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 卡中获得新文件。

于 2013-03-03T23:49:42.937 回答