অ্যান্ড্রয়েডে / এন্ড্রয়েডে ইমেজ প্রসেসিং – গ্যালারি থেকে ইমেজ সিলেক্ট

এর আগে ইমেজ প্রসেসিং নিয়ে দুইটি লেখা লিখেছি। সেখানে ইমেজ নিয়েছি আমরা Drawable ফোল্ডার থেকে। মানে আমরা যে ইমেজ গুলো অ্যাপে দিয়ে রেখেছি, সে গুলো নিয়েক কাজ করা যাবে। কিন্তু ব্যবহারকারী চাইলে ইমেজ পরিবর্তন করতে পারবে না। এ টিউটোরিয়ালে দেখব কিভাবে গ্যালারি থেকে ইমেজ সিলেক্ট করতে হয়।

এটি ইমেজ প্রসেসিং রিলেটেড না, কিন্তু এন্ড্রয়েডে ইমেজ প্রসেসিং নিয়ে কাজ করতে আমাদের দরকার পড়বে।

আগের দুইটি টিউটোরিয়ালঃ

Andoid Select Image

 

এই অ্যাপে একটা বাটন থাকবে, যা দিয়ে ইমেজ সিলেক্ট করবে। আর থাকবে ইমেজ ভিউ। যেখানে সিলেক্ট করা ইমেজটি লোড করব। ডিফল্ট ভাবে আমরা আপাতত অ্যান্ড্রয়েডের আইকনটি সেট করে দিব। XML ফাইলটিঃ

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Button android:text="Select Image"
        android:id="@+id/button1"
        android:onClick="pickImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </Button>

    <ImageView
        android:id="@+id/result"
        android:src="@drawable/ic_launcher"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
     </ImageView>
</LinearLayout>

ইমেজ রিড করার জন্য আমাদের নিচের পারমিশনটা AndroidManifest.xml এ যুক্ত করে দিতে হবে।

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

জাভা কোড গুলো। বিস্তারিত পরে লিখছিঃ



import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class MainActivity extends Activity {
    private static final int REQUEST_CODE = 1;
    private Bitmap bitmap;
    private ImageView imageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.result);
    }

    public void pickImage(View View) {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        startActivityForResult(intent, REQUEST_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
            try {

                if (bitmap != null) {
                    bitmap.recycle();
                }
                InputStream stream = getContentResolver().openInputStream(
                        data.getData());
                bitmap = BitmapFactory.decodeStream(stream);
                stream.close();

                imageView.setImageBitmap(bitmap);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        super.onActivityResult(requestCode, resultCode, data);
    }

}

আমরা ইমেজ সিলেক্ট করেছি Intent ব্যবহার করে। Intent হচ্ছে একটা অ্যাপের সাথে আরেকটা অ্যাপ / সার্ভিস বা এক্টিভিটির যোগাযোগের সিস্টেম। আমরা আমাদের অ্যাপ থেকে ব্যাকগ্রাউন্ড সার্ভিসকে বলছি আমাদের গ্যালারি এক্সেস দিতে। সেখান থেকে আমরা একটি ইমেজ সিলেক্ট করেছি।

xml এ দেখি বাটনে android:onClick=”pickImage” লেখা রয়েছে, এটা দিয়ে বলে দিয়েছি বাটনে যখন ক্লিক করা হবে, তখন pickImage মেথডটিকে কল করতে। আর pickImage মেথড থেকে intent এর সাহায্যে আমরা ইমেজ সিলেক্ট করার জন্য গ্যালারি ওপেন হবে।

onActivityResult মেথডে ইমেজটি সিলেক্ট করার পর তা Bitmap এ ওপেন করে আমাদের ইমেজ ভিউতে লোড করেছি। এই! সিম্পল।

এবার আপনার কাজ হচ্ছে আগের দুইটা টিউটোরিয়াল দেখে ইমেজ গ্যালারি থেকে ওপেন করার পর যেখানে যে কোন একটা ইফেক্ট দেওয়া। গুড লাক 🙂


Leave a Reply

Your email address will not be published. Required fields are marked *