2013-07-27 229 views
3

我在我的應用程序中使用相機。我需要拍照並應在imageview中顯示它。我正在使用以下代碼從相機拍攝照片並進行顯示。ImageView不顯示圖像

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri); 
    startActivityForResult(intent, 0); 
    imageView.setImageURI(capturedImageUri); 

這僅適用於兩個或有時三個圖像,那麼imageview不顯示圖像,但圖像是正確stored in SD card。 另外我還用

BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options); 
    Imageview.setImageBitmap(bitmap); 

但我面臨同樣的問題。任何人都可以幫助我。

+0

是否有任何錯誤顯示logcat的嗎? – JoxTraex

+0

你有什麼錯誤嗎?它看起來像你試圖顯示相機拍攝的全尺寸圖像,這將消耗過多的內存。 – Kai

+0

不,它不顯示任何錯誤。我也檢查了文件大小。它與顯示圖像幾乎相同。我也嘗試過壓縮。我仍然面臨同樣的問題。 – Mathan

回答

0

您是否嘗試過把你的setImageUri邏輯在活動回調onActivityResult

我想你想之前的任何內容保存到URI到圖像提供給ImageView的。你需要掛接到當相機實際拍攝照片是被炒魷魚(即相機活動結束並報告結果)回調

這個答案已經整整寫了

https://stackoverflow.com/a/5991757/418505

可能的東西像

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
    } 
} 
+0

Hi Selecsosi,謝謝你的迴應。我已經使用你的建議。問題仍然存在。 – Mathan

1
capturedImageUri will return path to captured Image not the actual Image.. 

而且,重要Note--如果你不需要使用 -

全尺寸的圖象
// cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); Comment this line 
    Bitmap image = (Bitmap) data.getExtras().get("data"); 

要獲得全尺寸的位圖使用下面的代碼 -

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       try 
       { 
        // place where to store camera taken picture 
        tempPhoto = createTemporaryFile("picture", ".png"); 
        tempPhoto.delete(); 
       } 
       catch(Exception e) 
       { 

        return ; 
       } 
       mImageUri = Uri.fromFile(tempPhoto); 
       cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); 
       startActivityForResult(cameraIntent, 1); 

private File createTemporaryFile(String part, String ext) throws Exception 
    { 
      // File to store image temperarily. 
     File tempDir= Environment.getExternalStorageDirectory(); 
     tempDir=new File(tempDir.getAbsolutePath()+"/.temp/"); 
     if(!tempDir.exists()) 
     { 
      tempDir.mkdir(); 
     } 
     return File.createTempFile(part, ext, tempDir); 
    } 




    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      ContentResolver cr = getApplicationContext().getContentResolver(); 
      try { 
       cr.notifyChange(mImageUri, null); 
       File imageFile = new File(tempPhoto.getAbsolutePath()); 


      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      Bitmap photo=null; 
      if (resultCode == 1) { 
       try { 
        photo = android.provider.MediaStore.Images.Media.getBitmap(cr, Uri.fromFile(tempPhoto)); 
imageView.setImageBitmap(photo); 
       } catch (FileNotFoundException e) { 

        e.printStackTrace(); 
       } catch (Exception e) { 

        e.printStackTrace(); 


} 
+0

Hi Amol感謝您的回覆。但我仍面臨同樣的問題。 – Mathan

+1

@Mathan你需要全尺寸的圖片嗎?或者您可以使用縮略圖嗎? 因爲添加'intent.putExtra(MediaStore.EXTRA_OUTPUT,capturedImageUri);'將返回完整大小的圖像。 –

+0

見編輯的代碼。 –