2016-11-05 8 views
0

カメラ映像にnull値を返し、その後、私は次のコードを実行します。BitmapFactory.decodeFileは()私はカメラのアクティビティに移動して、写真を撮るのAndroidアプリを持っている

 String s1 = file_uri.getPath(); 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     bitmap = BitmapFactory.decodeFile(s1, options); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 50, stream); 

file_uriを電話機ストレージからのイメージパスです(ヌルではありません)。ビットマップ変数はnullです。どうして?

+0

ファイルへの実際のパスとしてuri.getPath()を使用しています。代わりに、あなたは[Uriから実際の道を取る]べきです(http://stackoverflow.com/questions/3401579/get-filename-and-path-from-uri-from-mediastore)。 – MohanadMohie

+0

私は今それをチェックします。それらの違いは何ですか? –

+0

私は正直なところ違いを知らない。 [この回答](http://stackoverflow.com/questions/176264/what-is-the-difference-between-a-uri-a-url-and-a-urn/1984225#1984225)少し物事を明確にするかもしれない私はまだそれらについて混乱してしまいます。 – MohanadMohie

答えて

0

あなたのイメージが大きすぎるかもしれ、あなたはbitmapはいつもnullあり、これらのステートメントの後メモリ

+1

私は今何をすべきですか? –

0
options.inJustDecodeBounds = true; 
    bitmap = BitmapFactory.decodeFile(s1, options); 

から抜け出します。それは正常です。

options.inJustDecodeBounds = false; 
    bitmap = BitmapFactory.decodeFile(s1, options); 

これでビットマップを作成できます。そうでなければ、ビットマップは利用可能なメモリのために大きくなり、decodeFile()はnullを返しました。

次に、画像のサイズを変更する必要があります。 変数optionsには、画像の幅と高さがあります。 画素の幅と高さを知ることで、倍率を計算できます。または単にint scale = 8と言うと `。その後

options.inSampleSize = scale;  

このため

options.inJustDecodeBounds = false; 
    bitmap = BitmapFactory.decodeFile(s1, options); 

Presiseコードのような別のコールはStackOverflowの上で何度も投稿されています。

+0

ビットマップがまだヌルです –

+0

オリジナルの投稿の新しいコードブロックに適応されたコードを表示します。 – greenapps

関連する問題