Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显示输入流中的图像_Java_Android_Sockets_Android Imageview - Fatal编程技术网

Java 显示输入流中的图像

Java 显示输入流中的图像,java,android,sockets,android-imageview,Java,Android,Sockets,Android Imageview,我可以从Android手机向电脑发送字符串,反之亦然。但是,我想从我的计算机发送一个图像并将其显示到手机上。在我的例子中,计算机是服务器,手机是客户端 这是我在服务器端代码的一部分: socket = serverSocket.accept(); dataOutputStream = new DataOutputStream(socket.getOutputStream()); captureScreen("C:\\Users\\HP\\Desktop\\capture.png"); File

我可以从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控件,如何读取从计算机发送的图像作为输入流,并将其显示在ImageView上

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

可以调用ImageView的setImageBitmapBitmap bm

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

您可以使用android.graphics.BitmapFactory从流中创建位图

您可以调用ImageView的setImageBitmapBitmap bm

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

您可以使用android.graphics.BitmapFactory从流中创建位图

这是什么

    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
    }
}
}
}
所以你在安卓系统的sd卡上有了新文件。

这是什么

    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
    }
}
}
}


所以你的sd卡在Android上会有一个新文件。

你能给我提供这个转换的java代码吗?几乎一样,@WassiMZgheiB:Path Path=Path.getpath/to/file;byte[]data=Files.readAllBytespath@重写谢谢,我将这些字节写入了outputStream,但是我如何才能在客户端将它们作为输入流读取?@WassiMZgheiB我在回答中添加了代码,希望它能帮助你。再次感谢,但它不起作用。我的SD卡上没有保存任何内容,我在logcat中得到以下错误:java.net.SocketException:Connection reset by peer:socket write error at java.net.SocketOutputStream.sockettwrite0native Method at java.net.SocketOutputStream.sockettwriteUnknown Source at java.net.SocketOutputStream.writeUnknown Source at java.io.DataOutputStream.writeUnknown Source您能提供给我吗与此转换的java代码几乎相同,@WassiMZgheiB:Path Path=Path.getpath/to/file;byte[]data=Files.readAllBytespath@重写谢谢,我将这些字节写入了outputStream,但是我如何才能在客户端将它们作为输入流读取?@WassiMZgheiB我在回答中添加了代码,希望它能帮助你。再次感谢,但它不起作用。我的SD卡上没有保存任何内容,我在logcat中得到以下错误:java.net.SocketException:Connection reset by peer:socket write error at java.net.SocketOutputStream.sockettwrite0native Method at java.net.SocketOutputStream.sockettwriteUnknown Source at java.net.SocketOutputStream.writeUnknown Source at java.io.DataOutputStream.writeUnknown Source您能告诉我吗关于如何从inputStream创建位图的一些代码?谢谢,但是decodeStreaminputStream不起作用,我认为它返回空值。您可以尝试不同的版本,那里有十几个。null作为返回值表示输入错误。我建议尝试使用本地png文件,例如启动程序图标,它应该可以使用。我已手动将图像放在SD卡上并尝试:位图bMap=BitmapFactory.decodeFileimageName;img.setImageBitmapbMap;是的,你是对的,它是有效的!你能给我提供你如何在SD卡上动态创建图像的代码吗?我想问题要么是1个图像格式jpg vs png,要么是2个网络传输。您可以使用jpg图像尝试相同的方法来检查1。如果可行,请尝试将整个图像加载到字节[],然后调用BitmapFactory.DecodeByteArray。您可以向我展示一些如何从inputStream创建位图的代码吗?谢谢,但decodeStreaminputStream不起作用,我想它返回空值。您可以尝试不同的版本,那里有十几个。null作为返回值表示输入错误。我建议尝试使用本地png文件,例如启动程序图标,它应该可以使用。我已手动将图像放在SD卡上,并尝试:位图bMap=BitmapFactory.decodeFileimageN
ame;img.setImageBitmapbMap;是的,你是对的,它是有效的!你能给我提供你如何在SD卡上动态创建图像的代码吗?我想问题要么是1个图像格式jpg vs png,要么是2个网络传输。您可以使用jpg图像尝试相同的方法来检查1。如果可行,请尝试将整个图像加载到一个字节[],然后调用BitmapFactory.decodeByteArray