2012-05-28 59 views
2

在我的應用程序中,我通過android相機捕獲照片,然後我想將它發送到服務器。爲此我使用Client Socket編程。我將捕獲的照片轉換爲bytearray(byte []),然後將其發送到服務器。每件事情都在事實上發揮作用。Android:無法獲取相機捕獲的原始照片(只能讀取壓縮照片)

問題是否存在我無法將原始照片發送到服務器。縮略圖照片由android手機發送。但是當我用照相機拍攝照片時,原始照片就在畫廊中。

如何讓這張原始照片在我的應用程序中使用?

我的代碼:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     cameraIntent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG); 
     cameraIntent.putExtra("return-data", true); 
    startActivityForResult(Intent.createChooser(cameraIntent, "Select Picture"), 
        CAMERA_REQUEST); 

而且在onActivityResult方法:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == CAMERA_REQUEST) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
//   byte[] a = (byte[]) data.getExtras().getByteArray("data"); // I also use this but not work 


     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     photo.compress(CompressFormat.JPEG, 100, bos); 
     byte[] bitmapdata = bos.toByteArray(); 


    } 
} 

的BitmapData照片是有,但壓縮的照片不是原件。 有些人說,壓縮(CompressFormat.JPEG,100,BOS)的改變質量領域;介於0到100之間,但什麼都不會發生。

- >>是也有其他的方式來獲得原始照片是由相機

捕獲 - >>當這張照片是在我的電腦的文件夾,然後我看到這張照片通過給出路徑在文件中。 ex-File file = new File(c:\ newphoto \ image.jpg);。我可以在android中使用此代碼來閱讀原始照片,因爲我知道照片的名稱和位置。如果是,那麼在圖庫中閱讀照片的路徑是什麼。如果我將路徑設爲:\ DCIM \ Camera \ photoName.jpg,這是否正常工作?

- >>或者一些改變需要在我當前的代碼,它會正常工作?

回答

6

您正在使用Intent使用ACTION_IMAGE_CAPTURE來捕獲圖像。如果您通常使用Intent啓動相機,那麼它將在onActivityResult()中以位圖形式返回圖像,但它將用於縮略圖目的。

如果你想從相機獲得全分辨率圖像,那麼你應該提供一個文件,其中包含您正在觸發的目的以啓動相機活動。

你可以像下面

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
File out = Environment.getExternalStorageDirectory(); 
out = new File(out, imagename); 
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out)); 
startActivityForResult(i, CAMERA_RESULT); 

這裏有一個MediaStore.EXTRA_OUTPUT參數,需要在你希望你的相機寫一個圖像文件的URI。

欲瞭解更多信息,你可以參考例子

Capture full resolution image from camera

下方