Đọc tệp hình ảnh thành bitmap từ sdcard, tại sao tôi nhận được NullPointerException?


105

Làm cách nào để đọc tệp hình ảnh thành bitmap từ sdcard?

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

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

Tôi đang nhận được một NullPointerException cho bitmap. Nó có nghĩa là bitmap là null. Nhưng tôi có một tệp hình ảnh ".jpg" được lưu trữ trong sdcard là "flower2.jpg". Vấn đề là gì?

Câu trả lời:


265

API MediaStore có thể đang loại bỏ kênh alpha (tức là giải mã thành RGB565). Nếu bạn có đường dẫn tệp, chỉ cần sử dụng trực tiếp BitmapFactory nhưng yêu cầu tệp sử dụng định dạng bảo toàn alpha:

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

hoặc là

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


3
cái gì selected_photoở đây?
Autonomous

Chào! Hình ảnh được lưu trong Album có kích thước 3840x2160 nhưng hình ảnh được tải lên máy chủ thông qua phương pháp này có kích thước 1080x1920
Shajeel Afzal

@ ParagS.Chandakkar nó có thể là một ImageView nơi bạn có thể hiển thị tệp đã giải mã.
PinoyCoder


28

Hãy thử mã này:

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

6

Tôi đã viết đoạn mã sau để chuyển đổi một hình ảnh từ sdcard sang một chuỗi được mã hóa Base64 để gửi dưới dạng một đối tượng JSON. Và nó hoạt động rất tốt:

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.