ภาพรวม
ตัวอย่างนี้สาธิตวิธีอ่านไฟล์รูปภาพจาก Internal Storage และแสดงใน ImageView
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่
Android Studio → File → New Project → กรอกรายละเอียด
ขั้นตอนที่ 2: ออกแบบ Layout (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/read"
android:text="Read"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="300dp" />
</LinearLayout>
ขั้นตอนที่ 3: เขียน MainActivity.java
package com.example.andy.myapplication;
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.File;
public class MainActivity extends AppCompatActivity {
Button read;
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
read = findViewById(R.id.read);
read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ใช้ ContextWrapper เข้าถึง Internal Storage
ContextWrapper cw = new ContextWrapper(getApplicationContext());
// เข้าถึงโฟลเดอร์ imageDir ที่สร้างไว้ตอนบันทึก
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
// ไฟล์ mario.png (ต้องเป็นไฟล์ที่มีอยู่จริง)
File file = new File(directory, "mario.png");
// โหลดรูปภาพจากไฟล์และแสดงใน ImageView
imageView.setImageDrawable(Drawable.createFromPath(file.toString()));
}
});
}
}
การทดสอบและผลลัพธ์


ข้อมูลเพิ่มเติม
วิธีอื่นในการโหลดรูปภาพ
// 1. ใช้ BitmapFactory (ยืดหยุ่นกว่า สามารถกำหนดขนาดได้) Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); imageView.setImageBitmap(bitmap); // 2. ใช้ Glide/Picasso (แนะนำสำหรับ Production) Glide.with(this).load(file).into(imageView); // 3. ใช้ FileInputStream FileInputStream fis = new FileInputStream(file); Bitmap bitmap = BitmapFactory.decodeStream(fis); fis.close();
การจัดการขนาดรูปภาพ (ป้องกัน OutOfMemoryError)
BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(file.getAbsolutePath(), options); // คำนวณ inSampleSize options.inSampleSize = calculateInSampleSize(options, 300, 300); options.inJustDecodeBounds = false; Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
เส้นทางไฟล์ใน Internal Storage
ไฟล์ที่บันทึกด้วย ContextWrapper.getDir("imageDir", MODE_PRIVATE) จะอยู่ที่:
/data/data/<package_name>/app_imageDir/
สรุป
การอ่านรูปภาพจาก Internal Storage ใช้ ContextWrapper.getDir() เข้าถึงโฟลเดอร์เดิม แล้วใช้ Drawable.createFromPath() หรือ BitmapFactory.decodeFile() โหลดรูปภาพ ไม่ต้องการ Permission ใดๆ