2011-06-19 13 views
0

我在Android和C#上的服务器上有一个客户端应用程序,它们通过套接字进行通信。 根据请求服务器发送图像转换为字节[], ,但如何解码再次在我的设备上的图像?如何从BufferReader获取确切的字节?

我已经发现这个代码:

Bitmap bmp=BitmapFactory.decodeByteArray(b,0,b.length);      
image.setImageBitmap(bmp); 

下面是客户端的代码部分:

private void connectSocket(String a){ 

    try { 
     InetAddress serverAddr = InetAddress.getByName("192.168.1.2"); 
     Socket socket = new Socket(serverAddr, 4444); 

     BufferedReader in = null; 

     try { 
      out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 
      in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

      out.println(message); 

      String text = ""; 

      image = (ImageView)findViewById(R.id.imageView1); 
      while ((text = in.readLine()) != null) { 
       byte[] b = in.readLine().getBytes(); 
       Bitmap bmp=BitmapFactory.decodeByteArray(b,0,b.length);      
       image.setImageBitmap(bmp); 
      } 

     } catch(Exception e) { 
      Log.e("TCP", "S: Error", e); 
     } finally { 
      socket.close(); 
     } 

    } catch (UnknownHostException e) { 
     Log.e("TCP", "C: UnknownHostException", e); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     Log.e("TCP", "C: IOException", e); 
     e.printStackTrace(); 
    }  
} 

那么如何得到确切收到字节将它们转换的图像中?

回答

2

读者为文本。对于图像中的字节,您可能完全不想使用读取器,但应该根据输入流进行操作。

要获得帮助,请参阅this SO question的答案。

要将字节数组转换为图像,请参阅此link

+0

谢谢,我已经找到了解决方案 – 3Gee

+0

@ 3Gee我正在寻找一个类似的解决方案。你能指点我的解决方案吗? – zeeshan

+0

@zeeshan很久以前,我已经在旧代码中进行了一些挖掘,我相信这是解决方案: 'byte [] buffer = new byte [16200]; //从图像数组中提取图像 int size = is.read(buffer); byte [] buffer2 = new byte [size]; (int g = 0; g 3Gee

0

下面是我最终提出的解决方案。我不认为它是对还是错,但它在2011年为我的项目工作。不幸的是,我几乎不记得有关代码的任何细节。希望能帮助到你。

String serverIP = "192.168.0.2"; 

InetAddress server = InetAddress.getByName(serverIP); 
Socket socket = new Socket(server, 4444); 
InputStream inStream = socket.getInputStream(); 

byte[] buffer = new byte[16200]; // extract image from image array 
int size = inStream.read(buffer); 
byte[] buffer2 = new byte[size]; 
for(int g = 0; g < size; g++){ 
    buffer2[g] = buffer[g]; 
} 
image = (ImageView) findViewById(R.id.imageView1); 
Bitmap bmp = BitmapFactory.decodeByteArray(buffer2, 0, buffer2.length); 
image.setImageBitmap(bmp); 
相关问题