0

C++ クライアントからバイト配列を受信するサーバーを作成しました。クライアントはイメージを uchar 配列 (opencv を使用) として送信し、アンドロイドではデータを正しく受信しています。Android のサーバーはデータをバイト配列に格納するため、このバイト配列をビットマップに変換する必要があります。しかし、使用後に null Bitmap を取得していますBitmapFactory.decodeByteArray

これは、データを受信して​​バイト配列に格納するサーバーコードです

class imageReciver extends Thread {
public static byte imageByte[];
private ServerSocket serverSocket;
InputStream in;
int imageSize=921600;//expected image size 640X480X3

   public imageReciver(int port) throws IOException{
      serverSocket = new ServerSocket(port);
   }

   public void run()
   {
    Socket server = null;   
    server = serverSocket.accept();

    in = server.getInputStream();       
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte buffer[] = new byte[1024];         
    int remainingBytes = imageSize; //

    while (remainingBytes > 0) {
       int bytesRead = in.read(buffer);
       if (bytesRead < 0) {
         throw new IOException("Unexpected end of data");
       }
     baos.write(buffer, 0, bytesRead);
     remainingBytes -= bytesRead;
     }
    in.close();         
    imageByte = baos.toByteArray();   
    baos.close();
    server.close();

     //Here conver byte array to bitmap
     Bitmap bmp = BitmapFactory.decodeByteArray(imageByte, 0,imageByte.length);

     return;      
     }
   }
4

1 に答える 1

0

あなたのコードが正しくないようです。これを試してください:

try {
      URL myURL = new URL(url);
      final BufferedInputStream bis = new BufferedInputStream(myURL.openStream(), 1024);
      final ByteArrayOutputStream dataStream = new ByteArrayOutputStream();
      BufferedOutputStream out = new BufferedOutputStream(dataStream,1024);
      copy(bis, out);
      out.flush();
      final byte[] data = dataStream.toByteArray();
      BitmapFactory.Options bfo = new BitmapFactory.Options();
      bfo.inSampleSize = 2;
      Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length, bfo);
      bis.close(); 
      //use the bitmap...
}
catch (Exception e) {
      //handle ex
}
于 2013-09-04T12:48:28.147 に答える