2017-05-03 29 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/Android設備/數據文件// /圖片/ JPEG_20170503_102533_2060032401.jpg

我可以硬編碼mCurrentPhotoPath的值以公知的照片,我仍然無效。

但是如果我更換與 存儲/模擬/ 0/DCIM /攝像機/ IMG_20161124_145814981_HDR.jpg (單獨使用我的手機正常的相機應用創建的照片),那麼它的工作原理。

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

在我的清單。這兩個文件具有相同的權限並且大小相同。我可以將它們複製到別處,它們似乎是有效的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

我現在看到我使用拍攝照片的過程是創建2個文件:在存儲的實際圖像/模擬/ 0/DCIM和應用程序的存儲區域創建的手機上的文件,所以這個問題似乎是我如何創建/保存圖像。我在這裏使用代碼https://developer.android.com/training/camera/photobasics.html#TaskPath 但大概有錯誤。我會關閉這個,再看一遍,如果有必要,提出一個新的問題。