Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีอ่านไฟล์รูปภาพจาก Internal Storage ใน Android

ภาพรวม

ตัวอย่างนี้สาธิตวิธีอ่านไฟล์รูปภาพจาก 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()));
            }
        });
    }
}

การทดสอบและผลลัพธ์

วิธีอ่านไฟล์รูปภาพจาก Internal Storage ใน Android

วิธีอ่านไฟล์รูปภาพจาก Internal Storage ใน Android

ข้อมูลเพิ่มเติม

วิธีอื่นในการโหลดรูปภาพ

// 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 ใดๆ