2016-09-18 71 views
-1

我需要獲得高品質的位圖得到捕獲來自攝像機圖像,但它似乎驗證碼:無法從相機

Intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri); 

從獲取到onActivityResult停止活動,並拋出這樣一個異常:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=null} to activity 

這就是我從5小時搜索中得出的結果。

這是我的代碼: 意圖

File mediaStorageDir = new File(Environment.getExternalStorageDirectory() + "/Files"); 
String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date()); 
String mImageName = "MI_" + timeStamp + ".jpg"; 
File mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName); 
imageUri = Uri.fromFile(mediaFile); 
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri); 
filePath = imageUri.getPath(); 
Log.e("000", filePath + " :|"); 
startActivityForResult(cameraIntent, 0); 

在日誌行我得到的路徑,但是當我按下保存在相機應用程序,我得到錯誤和空filePath

Bitmap bitmap = BitmapFactory.decodeFile(filePath); 
appPanel.setBitmap(bitmap); 

這段代碼不錯,但返回的是低質量圖像:

Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 

最後我找到了解決辦法:

我們必須onSaveInstanceState如下保存路徑:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
super.onSaveInstanceState(outState); 

CharSequence userText = CapturedPath; 
outState.putCharSequence("savedText", userText); 
} 

,並使其回到onRestoreInstanceState

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
super.onRestoreInstanceState(savedInstanceState); 

CapturedPath =savedInstanceState.getCharSequence("savedText").toString(); 

//Load bitamp from here: 
Bitmap bitmap = BitmapFactory.decodeFile(CapturedPath); 
appPanel.setBitmap(bitmap); 

} 

回答

0

我得到了同樣的問題,設備攝像頭應用程序有時不會返回任何數據onActivityResult()。 這尤其是操作系統的依賴關係。

我的要點在下面。希望這可以幫助你一點。

CameraManager

+0

我發現在我的崗位 – MREZA

+0

解決形容我忘了把新的支持lib中exifInterface。 這將適用於所有設備和操作系統的所有orientatino。 到目前爲止沒有問題。請檢查一下。 https://android-developers.googleblog.com/2016/12/introducing-the-exifinterface-support-library.html – neonankiti

-1

經過一番研究,我發現這個

如果你有攝像頭的對象,嘗試:

android.hardware.Camera.Parameters parameters = camera.getParameters(); 
android.hardware.Camera.Size size = parameters.getPictureSize(); 


int height = size.height; 
int width = size.width; 

分辨率是指以像素數量的圖像。分辨率有時通過圖像的寬度和高度以及圖像中的像素總數來確定。例如,2048像素寬和1536像素高(2048X1536)的圖像包含(乘)3,145,728像素(或3.1百萬像素)。你可以稱它爲2048X1536或者3.1百萬像素的圖像。隨着相機中攝像設備的百萬像素數量的增加,您可以生成的可能的最大尺寸圖像也會增加。這意味着500萬像素的攝像頭能夠拍攝比300萬像素攝像頭更大的圖像。

例子:1936年X一百○二萬四千分之一千五百五十二= 3個百萬像素

+0

我該如何使用它作爲答案? – MREZA