2012-10-16 28 views
5

1.I lấy dữ liệu camera android chuyển đổi sang bitmaoLàm cách nào để chuyển đổi ByteArrayInputStream thành jpeg và hiển thị trên điện thoại di động Android?

if (mBitmap == null)  //create Bitmap image first time 
     { 
      Camera.Parameters params = camera.getParameters(); 
      width_ima = params.getPreviewSize().width; 
      height_ima = params.getPreviewSize().height;      
      mBitmap = Bitmap.createBitmap(width_ima, height_ima, Bitmap.Config.RGB_565); 
      mRGBData = new int[width_ima * height_ima]; 
     } 

     decodeYUV420SP(mRGBData, data, width_ima, height_ima); 
     mBitmap.setPixels(mRGBData, 0, width_ima, 0, 0, width_ima, height_ima); 

2.send dữ liệu với udp

ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); 

     mBitmap.compress(Bitmap.CompressFormat.JPEG, 50, byteStream); // !!!!!!! change compression rate to change packets size 

     byte data[] = byteStream.toByteArray(); 
     Log.e(TAG, "SIZE: " + data.length); 

     int nb_packets = (int) Math.ceil(data.length/(float)DATAGRAM_MAX_SIZE); 
     int size = DATAGRAM_MAX_SIZE; 

     /* Loop through slices */ 
     for(i = 0; i < nb_packets; i++) 
     {   
      if(i >0 && i == nb_packets-1) size = data.length - i * DATAGRAM_MAX_SIZE; 

      /* Set additional header */ 
      byte[] data2 = new byte[HEADER_SIZE + size]; 
      data2[0] = (byte)frame_nb; 
      data2[1] = (byte)nb_packets; 
      data2[2] = (byte)i; 
      data2[3] = (byte)(size >> 8); 
      data2[4] = (byte)size; 

      /* Copy current slice to byte array */ 
      System.arraycopy(data, i * DATAGRAM_MAX_SIZE, data2, HEADER_SIZE, size);   

      try 
      {   
       size_p = data2.length; 
       DatagramPacket packet = new DatagramPacket(data2, size_p, serverAddr, 9000); 
       socket.send(packet); 

3.Tôi nhận được dữ liệu trên android di động

while (true) 
     {   

      try { 
       socket.receive(packet); 
       System.out.println("已经收到信息了!!!"); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }    
      byte[] data = packet.getData();   
      int frame_nb = (int)data[0]; 
      int nb_packets = (int)data[1]; 
      int packet_nb = (int)data[2]; 
      int size_packet = (int) ((data[3] & 0xff) << 8 | (data[4] & 0xff)); 

      if((packet_nb==0) && (current_frame != frame_nb)) 
      { 
       current_frame = frame_nb; 
       slicesStored = 0;    
       imageData = new byte[nb_packets * DATA_MAX_SIZE]; 
      } 

      if(frame_nb == current_frame) 
      { 
        System.arraycopy(data, HEADER_SIZE, imageData, packet_nb * DATA_MAX_SIZE, size_packet); 
        slicesStored++;    
      } 

      /* If image is complete display it */ 
      if (slicesStored == nb_packets) 
      {     
       ByteArrayInputStream bis = new ByteArrayInputStream(imageData); 

      } 

Và câu hỏi của tôi là: làm thế nào tôi có thể hiển thị dữ liệu bis ByteArrayInputStream trên điện thoại di động Android ... Cảm ơn bạn đã trả lời!

+0

Vâng những gì loại đối tượng bạn tìm kiếm trên phía khách hàng? Tôi mong đợi nó có một phương thức khởi tạo hoặc phương thức factory lấy InputStream, hoặc có thể lấy một cái gì đó * else * có một hàm tạo lấy một InputStream. –

+0

Bạn có muốn nói rằng bạn muốn chuyển đổi ByteArrayInputStream thành một ảnh bitmap ?? –

+0

vâng, ý tôi là chuyển đổi ByteArrayInputStream thành hình ảnh bitmap –

Trả lời

5

Để chuyển đổi ByteArrayInputStream đến một hình ảnh jpeg bạn chỉ có thể sử dụng đoạn mã sau:

ByteArrayInputStream bis = new ByteArrayInputStream(imageData); 
    Bitmap bp=BitmapFactory.decodeStream(bis); //decode stream to a bitmap image 
    yourImageView.setImageBitmap(bp); //set the JPEG image in your image view 

Hope this helps .. Cảm ơn ..

+0

xin chào, ý tôi là bitmap hiển thị từng cái một. nó trông giống như một video. tôi có thể làm gì? –

+0

Cảm ơn bạn đã trả lời, tôi đã nhận được !!! –

+0

@ 纯洁 的 坏蛋 tôi biết nó rất muộn, nhưng bạn có biết làm thế nào để hiển thị nó như là một video? –

Các vấn đề liên quan