2012-10-16 13 views
5

1.I uzyskać dane android aparat konwertować do bitmaoJak mogę przekonwertować ByteArrayInputStream na jpeg i wyświetlić na telefonie z Androidem?

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 dane 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.i odbierać dane na android telefonu

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); 

      } 

Moje pytanie brzmi: w jaki sposób mogę wyświetlić dane ByteArrayInputStream w systemie Android na telefonie komórkowym ... Dziękuję za odpowiedź!

+0

Dobrze, jaki rodzaj obiektu szukasz na Strona klienta? Spodziewałbym się, że będzie miał konstruktor lub metodę fabryczną pobierającą InputStream, lub prawdopodobnie biorąc coś * innego *, który ma konstruktora biorąc InputStream. –

+0

Czy chcesz powiedzieć, że chcesz przekonwertować obiekt ByteArrayInputStream na obraz bitmapowy? –

+0

tak, mam na myśli konwersję ByteArrayInputStream na obraz bitmapowy –

Odpowiedz

5

W celu przekształcenia ByteArrayInputStream do obrazu JPEG można po prostu użyć następującego kodu:

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 

nadzieję, że to pomaga .. Dzięki ..

+0

witam, mam na myśli wyświetlanie bitmapy jeden po drugim. wygląda jak wideo. co mogę zrobić? –

+0

Dziękuję za odpowiedź, mam to !!! –

+0

@ 纯洁 的 坏蛋 Znam ją bardzo późno, ale czy wiesz, jak pokazać ją jako wideo? –

Powiązane problemy