2011-06-19 7 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); バイト[]バッファ2 =新しいバイト[サイズ];for(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);