2013-11-17 5 views
-1

Я хочу получить изображение JPEG из входного сокета в Android. Могу ли я использовать метод Bitmap и сразу конвертировать поток ввода в JPG или преобразовать входной поток в массив байтов, а затем преобразовать его в JPG?Не удается найти изображение JPEG из входного сокета в Android

Код, который я на самом деле пытается это:

  private final BluetoothSocket mmBTSocket; 
    private final InputStream mmBTInStream; 
    private final OutputStream mmBTOutStream; 

    public ConnectedThread(BluetoothSocket socket) { 
     Log.d(BTTAG, "create ConnectedThread"); 
     mmBTSocket = socket; 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     // Get the BluetoothSocket input and output streams 
     try { 
      tmpIn = socket.getInputStream(); 
      tmpOut = socket.getOutputStream(); 
     } catch (IOException e) { 
      Log.e(BTTAG, "temp sockets not created", e); 
     } 

     mmBTInStream = tmpIn; 
     mmBTOutStream = tmpOut; 
    } 
         public void run() { 

         Log.i(BTTAG, "BEGIN mBTConnectedThread"); 

         byte[] inBTBuffer = new byte[1024]; 

         boolean BTFileEndOne = false; 

         byte[] mBTimageBuffer = new byte[15360]; // 15KB reserved 

           int bytes; 

           bytes = mmBTInStream.read(inBTBuffer); 

       for (int i = 0; i < bytes; i++) { 
        mBTimageBuffer[mBTfileIndex] = inBTBuffer[i]; 
        mBTfileIndex++; 
        // start = System.currentTimeMillis(); 
        // Log.i(BTTAG, bytes+"="+String.format("%02X", 
        // inBTBuffer[i])); 
        if (i > 0) { 
         if (inBTBuffer[i] == (byte) 0xD9) { 
          BTFileEndOne = true; 
          Log.i(BTTAG, "BTFileEndOne = true"); 

          if (inBTBuffer[i - 1] == (byte) 0xFF) { 
           //if (SaveImagetoSD() == true) { 

            //byte[] readBuf = (byte[]) msg.obj; 
     Bitmap bitmap = BitmapFactory.decodeStream(mmBTInStream); 
     bitmap.compress(CompressFormat.JPEG, 80, mmBTOutStream); 

     String writeTo = new File(Environment.getExternalStorageDirectory()+ File.separator + "motoduino.jpg") .toString();     
     FileOutputStream output = null; 
     try { 
      output = new FileOutputStream(writeTo); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }` 
+0

Похоже, что из кода mmBTinStream используется для отправки более одного файла, поэтому, к сожалению, BitmapFactory.decodeStream (mmBTinStream) не будет работать, так как он должен видеть файл jpg или png, как это было бы в виде файла , Сначала вам нужно сохранить байты в файл таким образом, чтобы вы также могли проверить, что оно не было повреждено. –

+0

Вам нужно использовать перенесенное изображение в своем приложении, или вы сохраняете его и не используете его в своем приложении? –

+0

На самом деле я буду загружать переданное изображение на сервер. Но на самом деле я отправляю только один файл из arduino – user2964385

ответ

1

BitmapFactory можно загрузить как PNG и JPG.

Bitmap bitmap = BitmapFactory.decodeStream(inputstream); 

вы можете сохранить как JPEG или PNG с:

bitmap.compress(CompressFormat.JPEG, 80, outputstream); 

редактирования: сохранить на внешнее устройство хранения:

File sdcard = Environment.getExternalStorageDirectory(); 
    if(sdcard!=null){ 
     File myjpg = new File(sdcard,"test.jpg"); 
     try{ 
      OutputStream outputstream = new FileOutputStream(myjpg); 
      mybitmap.compress(CompressFormat.JPEG, 80, outputstream); 
      outputstream.close(); 
     }catch(Exception e){ e.printStackTrace(); } 
    }else{ 
     Log.e("jpg save","sdcard not inserted or not ready"); 
    } 

вам нужно использует-разрешение android.permission.WRITE_EXTERNAL_STORAGE в манифесте ,

+0

Спасибо большое за комментарий. И как я могу сохранить это на SD-карте? – user2964385

+0

Когда я пытаюсь таким образом, он возвращает NULL. 11-17 15: 46: 03.757: D/skia (21948): --- SkImageDecoder :: Factory возвратил null – user2964385

+0

, если он возвращает null, тогда нам нужно посмотреть, как создается ваш входной поток. –

Смежные вопросы