Чтение файла изображения в растровое изображение с SD-карты, почему я получаю исключение NullPointerException?

Как я могу прочитать файл изображения в растровое изображение с SD-карты?

 _path = Environment.getExternalStorageDirectory().getAbsolutePath();  

System.out.println("pathhhhhhhhhhhhhhhhhhhh1111111112222222 " + _path);  
_path= _path + "/" + "flower2.jpg";  
System.out.println("pathhhhhhhhhhhhhhhhhhhh111111111 " + _path);  
Bitmap bitmap = BitmapFactory.decodeFile(_path, options );  

Я получаю исключение NullPointerException для растрового изображения. Это означает, что растровое изображение равно нулю. Но у меня есть файл изображения «.jpg», хранящийся на SD-карте как «flower2.jpg». В чем проблема?


person Smitha    schedule 03.01.2012    source источник


Ответы (4)


API MediaStore, вероятно, отбрасывает альфа-канал (т. е. декодирует в RGB565). Если у вас есть путь к файлу, просто используйте BitmapFactory напрямую, но скажите, чтобы он использовал формат, сохраняющий альфа-канал:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options);
selected_photo.setImageBitmap(bitmap);

or

http://mihaifonoage.blogspot.com/2009/09/displaying-images-from-sd-card-in.html

person NikhilReddy    schedule 03.01.2012
comment
что здесь selected_photo? - person Autonomous; 05.08.2014
comment
Привет! Изображение, сохраненное в альбомах, имеет размер 3840x2160, но изображение, загруженное на сервер с помощью этого метода, имеет размер 1080x1920. - person Shajeel Afzal; 03.04.2015
comment
@ParagS.Chandakkar, это может быть ImageView, где вы можете отобразить декодированный файл. - person PinoyCoder; 21.10.2016

Оно работает:

Bitmap bitmap = BitmapFactory.decodeFile(filePath);
person Ahmad Arslan    schedule 28.06.2014

Попробуйте этот код:

Bitmap bitmap = null;
File f = new File(_path);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
try {
    bitmap = BitmapFactory.decodeStream(new FileInputStream(f), null, options);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}         
image.setImageBitmap(bitmap);
person Jitendra    schedule 03.01.2012

Я написал следующий код для преобразования изображения из SD-карты в строку с кодировкой Base64 для отправки в виде объекта JSON. И он отлично работает:

String filepath = "/sdcard/temp.png";
File imagefile = new File(filepath);
FileInputStream fis = null;
try {
    fis = new FileInputStream(imagefile);
    } catch (FileNotFoundException e) {
    e.printStackTrace();
}

Bitmap bm = BitmapFactory.decodeStream(fis);
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bm.compress(Bitmap.CompressFormat.JPEG, 100 , baos);    
byte[] b = baos.toByteArray(); 
encImage = Base64.encodeToString(b, Base64.DEFAULT);
person Priyank Desai    schedule 14.07.2013