Ответ 1
На этот вопрос был дан ответ, например: BitmapFactory.decodeFile возвращает нулевое изображение
Это было именно то, что мне нужно:
String fname=new File(getFilesDir(), "test.png").getAbsolutePath();
У меня есть файл, сохраненный локально в личном хранилище приложения. Я проверил, что существует, однако всякий раз, когда я называю 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 возвращает нулевое изображение
Это было именно то, что мне нужно:
String fname=new File(getFilesDir(), "test.png").getAbsolutePath();
Люди, файлы, хранящиеся в ресурсе приложения, должны ссылаться особым образом. Например. если файл находится в активах и имеет имя "myfile.png", он должен быть указан как:
String uriString="file:///android_asset/myfile.png";
Uri uri=Uri.parse(uriString);
Вместо использования 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);
BitmapFactory.decodeFile
ожидает путь к файлу без схемы. Т.е. без file://
в начале.
Если вы обрабатываете Uri, не просто .toString()
, а вместо этого вызовите .getPath()
и передайте это методу.
Не могли бы вы попробовать fileList()? Это
возвращает массив строк, называя личные файлы, связанные с этим Контекстный пакет приложений.
Для меня я получал изображение из локально сохраненного URL-адреса, например, "file:///storage/emulated/0/...." (я использовал плагин 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);