2017-05-03 19 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

最初のパスが不正な形式になっていると、中間に2つの '//'があります – LukeJanyga

答えて

0

オプションの方法で画像を拡大縮小する必要があります。ストレージの実際の画像は、/、/ 0/DCIMと電話でアプリの記憶領域に作成されたファイルをエミュレート:私は今、私は写真を撮るために使用している手順では、2つのファイルを作成していることがわかり

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); 
関連する問題