ファイルをアプリケーションのプライベートストレージにローカルに保存しました。存在することを確認しましたが、BitmapFactory.decodeFile
を呼び出すと常にnull
が返されます。
ファイルをリソースとして保存し、ImageView.setImageResource
を使用すると、常に問題なく表示されます。
何が問題ですか?
これがスニペットです:
filename = "test.png";
if (doesFileExist(filename))
Bitmap bMap = BitmapFactory.decodeFile(filename);
私も試しました:
Bitmap bMap = BitmapFactory.decodeFile(getFilesDir().getPath()
+ filename);
この質問は以前、たとえば次のように回答されています。 BitmapFactory.decodeFileは画像が存在していてもnullを返します
これはまさに私が必要としたものでした:
String fname=new File(getFilesDir(), "test.png").getAbsolutePath();
アプリリソースに格納されているファイルやファイルは、特別な方法で参照する必要があります。例えば。ファイルがアセットにあり、「myfile.png」という名前の場合、次のように参照する必要があります。
String uriString="file:///Android_asset/myfile.png";
Uri uri=Uri.parse(uriString);
_BitmapFactory.decodeFile
_は、スキームのないファイルパスを想定しています。つまり最初に_file://
_なし。
Uriを処理している場合は、.toString()
だけでなく、.getPath()
を呼び出してメソッドに渡します。
BitmapFactory.decodeFileを使用する代わりに、InputStreamを使用してみてください。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
InputStream imageStream = getContentResolver().openInputStream(selectedImage);
Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
FileList()を試していただけませんか?それ
このコンテキストのアプリケーションパッケージに関連付けられたプライベートファイルを指定する文字列の配列を返します。
Manifest.permission.READ_EXTERNAL_STORAGEの実行時権限を設定する必要があります。そうしないと、ログにエラーメッセージや表示が表示されずにnullが返されます。マニフェストと実行時の両方で権限をリクエストする必要があることに注意してください。
私にとっては、「file:/// storage/emulated/0/....」のようなローカルに保存されたURLから画像を取得していました(Phonegapプラグインを使用して画像をキャプチャしました。プラグインが画像パスを提供していたので、ネイティブコードで使用)
これは私のために働いたコードスニペットです。
String captured_image_info = "file:///storage/emulated/0/Android/data/com.testapp/cache/1493809796526.jpg"
Uri uri=Uri.parse(captured_image_info);
largeLog("uri", "" + uri);
InputStream imageStream = getContentResolver().openInputStream(uri);
Bitmap bm = BitmapFactory.decodeStream(imageStream);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
byte[] decodedBytes = baos.toByteArray();
Bitmap img_captured_image = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);