2012-06-04 59 views
0

我試圖在Android應用中拍照,將其轉換爲JPEG格式,然後將其上傳到Web服務。到目前爲止,我得到以下幾點:如何在Android中可靠地拍照?

private static final int CAMERA_REQUEST = 1888; 
private void TakePhoto() { 
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
     case CAMERA_REQUEST: 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 

      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      photo.compress(Bitmap.CompressFormat.JPEG, 90, bos); 
      byte [] bitmapData = bos.toByteArray(); 

      char [] dataAsChar = new String(bitmapData).toCharArray(); 

      URL url = new URL("http://www.foo.com/bar); 
      URLConnection conn = url.openConnection(); 
      conn.setDoOutput(true); 
      conn.setRequestProperty("Content-Type", "application/octet-stream"); 

      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
      wr.write(dataAsChar); 
      wr.flush(); 

      // Get the response 
      BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      String line; 
      while ((line = rd.readLine()) != null) { 
       // Process line... 
      } 
      wr.close(); 
      rd.close(); 

      break; 
    } 
} 

它本身似乎工作,例如,不會崩潰。我得到了位圖photo變量。然後我使用ByteArrayOutputStream壓縮它,它變成大約5103字節(在緩衝區中)。然後我將它轉換爲一個char數組(以便它可以發送)並且char數組變成4758個元素。不知道這是爲什麼(可能是這條線char [] dataAsChar = new String(data).toCharArray();)。當然,一旦圖像轉移到另一邊,它就會損壞。

我在這裏錯過了什麼?

編輯。每從@digitalJoel建議,我攆使用OutputStreamWriter與

OutputStream os = conn.getOutputStream(); 
os.write(data); 

回答

2

new String(bitmapData).toCharArray()取代似乎是一個非常糟糕的主意給我。我不認爲你可以期望從JPEG中的所有字節被推入到字符串中,而不會發生一些破壞。那麼,爲什麼不將這些字節寫入OutputStream而不是將它封裝在OutputStreamWriter中呢?

1

當您創建從中獲取字符數組的字符串時,您沒有指定編碼方法。 Android的默認字符串編碼方法可以將多個原始字節轉換爲單個邏輯字符嗎?

即使不是,那種事情也是爲什麼(就像@digitaljoel所說的)爲了得到一個字符數組而構建一個字符串並不是最好的想法。