2017-05-03 8 views
0

저는 Android 개발자 가이드를 통해 기존 카메라 앱을 사용하여 사진을 찍는 앱을 만들었습니다. 다음으로 나는이 부분을 사용하여 이미지 뷰에 넣으려고합니다. https://developer.android.com/training/camera/photobasics.html#TaskScalePhoto BitmapFactory decodeFile은 null을 반환합니다. 다음 코드로 단순화했지만 동일한 결과를 제공합니다.BitmapFactory decodeFile이 null을 반환하는 이유는 무엇입니까?

Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath); 
imageView.setImageBitmap(bitmap); 
mCurrentPhotoPath는 image.getAbsolutePath()로 설정하고 예 저장/알려진에/0/안드로이드/데이터 // 파일/사진/JPEG_20170503_102533_2060032401.jpg

열심히 mCurrentPhotoPath의 값을 코딩 할 수 있습니다를 에뮬레이트입니다

사진과 나는 여전히 null이됩니다.

그러나 나는 그 작동 스토리지// 0/DCIM/카메라/IMG_20161124_145814981_HDR.jpg (별도 내 전화가 일반 카메라 응용 프로그램을 사용하여 만든 사진) 에뮬레이션 것으로 교체합니다.

나는 나의 매니페스트에

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 

있습니다. 2 개의 파일은 동일한 사용 권한을 가지며 크기가 같습니다. 다른 곳에 복사 할 수 있으며 유효한 jpeg 파일 인 것 같습니다. 어떤 아이디어가 계속 될 수 있습니까?

나는 많은 게시물을 검토하고 아래의 변형을 포함하여 여러 가지를 시도했지만 동일한 결과를 얻습니다.

File dest = new File(mCurrentPhotoPath); 
FileInputStream fis = null; 
fis = new FileInputStream(dest); 
Bitmap img = BitmapFactory.decodeStream(fis); 
smallPhoto.setImageBitmap(img); 
+0

경로는'/'로 시작합니다. 나는 네가 일한다고 말하는 것을 포함하여 너의 모든 것이 실패 할 것으로 기대한다. – CommonsWare

+0

잘못된 BitmapOptions을 전달한 것 같습니다. –

+0

첫 번째 경로의 형식이 잘못되었습니다. 중간에 두 번'// '이 있습니다. – LukeJanyga

답변

0

옵션 방법을 통해 이미지의 크기를 조정해야합니다.

File dest = new File(mCurrentPhotoPath); 
FileInputStream fis = null; 
fis = new FileInputStream(dest); 
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = scale; 
Bitmap img = BitmapFactory.decodeStream(fis, options); 
smallPhoto.setImageBitmap(img); 
0

내가 지금은 사진을 촬영하기 위해 사용하고 절차가이 개 파일을 만드는 것을 볼 : 스토리지의 실제 이미지가// 0/DCIM 및 전화 응용 프로그램의 저장 영역에 생성 된 파일을 에뮬레이트, 그래서 문제는 내가 이미지를 만들고 저장하는 방법에있는 것처럼 보입니다. 여기에 코드를 사용하고 있습니다. https://developer.android.com/training/camera/photobasics.html#TaskPath 하지만 아마도 잘못된 것이 있습니다. 나는 이것을 닫고, 다시 살펴보고, 필요하다면 새로운 질문을 제기 할 것이다.