อ่านไฟล์รูปภาพเป็นบิตแมปจาก sdcard ทำไมฉันถึงได้รับ NullPointerException


105

ฉันจะอ่านไฟล์รูปภาพเป็นบิตแมปจาก 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 );  

ฉันได้รับ NullPointerException สำหรับบิตแมป หมายความว่าบิตแมปเป็นโมฆะ แต่ฉันมีไฟล์รูปภาพ ".jpg" ที่เก็บไว้ใน sdcard เป็น "flower2.jpg" มีปัญหาอะไร?

คำตอบ:


265

MediaStore API อาจทิ้งช่องอัลฟา (เช่นถอดรหัสเป็น RGB565) หากคุณมีเส้นทางของไฟล์เพียงแค่ใช้ BitmapFactory โดยตรง แต่บอกให้ใช้รูปแบบที่รักษาอัลฟา:

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

หรือ

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


3
ที่selected_photoนี่คืออะไร?
ปกครองตนเอง

ไฮ! รูปภาพที่บันทึกในอัลบัมคือ 3840x2160 แต่รูปภาพที่อัปโหลดไปยังเซิร์ฟเวอร์ด้วยวิธีนี้มีขนาด 1080x1920
Shajeel Afzal

@ ParagS.Chandakkar อาจเป็น ImageView ที่คุณสามารถแสดงไฟล์ที่ถอดรหัสได้
PinoyCoder


28

ลองใช้รหัสนี้:

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

ฉันเขียนรหัสต่อไปนี้เพื่อแปลงภาพจาก sdcard เป็นสตริงที่เข้ารหัส 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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.