2012-01-03 9 views
92

Jak mogę odczytać plik obrazu z bitdap z sdcard?Czytanie pliku obrazu na bitmapie z sdcard, dlaczego otrzymuję wyjątek NullPointerException?

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

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

Otrzymuję wyjątek NullPointerException dla bitmapy. Oznacza to, że bitmapa ma wartość zerową. Ale mam plik obrazu ".jpg" przechowywany w sdcard jako "flower2.jpg". Jaki jest problem?

Odpowiedz

231

MediaStore API prawdopodobnie wyrzuca kanał alfa (tj. Dekoduje do RGB565). Jeśli masz ścieżkę do pliku, wystarczy użyć BitmapFactory bezpośrednio, ale powiedz jej używać formatu zachowującego alpha:

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

lub

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

+3

co jest 'selected_photo' tutaj? –

+3

Twój ImageView ... –

+0

Cześć! Obraz zapisany w Albumach to 3840x2160, ale obraz przesłany na serwer za pośrednictwem tej metody to 1080x1920 –

22

Spróbuj kod:

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); 
5

Napisałem poniższy kod, aby przekonwertować obraz z sdcard na zakodowany kod Base64, aby wysłać go jako obiekt JSON. I działa świetnie:

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); 
20

Działa:

Bitmap bitmap = BitmapFactory.decodeFile(filePath); 
Powiązane problemy