2016-01-31 52 views
0

我正在使用EasyImage庫來拍照。
然後,我將這些文件轉換爲位圖,然後將位圖轉換爲Base64並將其上傳到服務器。
我知道,這不是一個好的方法,但這就是我目前的做法。將文件解碼爲位圖有時有效,有時不會

當拍攝照片時:

@Override 
public void onImagePicked(File imageFile, EasyImage.ImageSource source) { 
    uploadImage(imageFile); 
} 

這裏面 「uploadImage」 方法的第一行:

Image image = new Image(LoginManager.getInstance(getApplicationContext()).getUsername(), file); 

這是構造:

public Image(String userName, File imageFile) { 
    this.userName = userName; 
    this.imageFile = imageFile; 

    createBase64(getBitmap()); 
} 

內部「getBitmap 「是問題開始的地方。這2條線具體爲:

bitmap = BitmapFactory.decodeFile(imageFile.getPath()); 
bitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, false); 

鏡像文件是從未空。
我用調試器至少檢查了100次,它從不爲空。它也總是有路徑。
getPath()從不爲空。
但是,它仍然經常無法創建位圖。

有時它是成功的,一切都很好,但大多數時候,位圖都是空的。
我不知道爲什麼。
文件(拍攝的圖片)總是被成功創建,並且永遠不會爲空,但是由於某種原因它只是無法創建位圖。

回答

2

documentation

返回
得到的解碼位圖,或爲空,如果它不能被解碼。

這可能有各種原因,大多數時候位圖太大,空間不能分配。

檢查映像的路徑是否存在,以及您是否具有指定URI的讀/寫權限。

如果您確實可以訪問,但仍然無法訪問,您應該在方法調用中添加BitmapFactory.Options,並設置inSampleSize以加載較小版本的圖像。

如果設置爲大於1的值,請求解碼器對原始圖像進行二次採樣,返回一個較小的圖像以節省內存。

同時你應該總是檢查使用位圖時返回的null,因爲內存永遠是個問題。

+0

謝謝你的回答。我已將inSampleSize設置爲4(也嘗試過8),但它仍然無法正常工作。同樣的問題。你有什麼其他想法可能會出錯嗎? – Guy

+0

@Whiz檢查您的LogCat可能的輸出在通話之前/之後。確保uri/path存在,並且你有讀/寫權限,比這更難... –

+0

當你提到「讀/寫訪問」時,我去檢查我的應用程序信息(在手機上),並看到我只有CAMERA權限,但沒有存儲。我授予存儲許可,回到應用程序,現在它可以100%的時間工作。爲什麼會發生這種情況?當您嘗試在未經許可的情況下執行某些操作時,該應用不應該崩潰嗎它爲什麼有時(很少)實際上仍然工作?我很困惑這一點。但無論如何,非常感謝!隨意在你的答案中添加權限的事情,我會很樂意接受它:) – Guy

相關問題