কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েডে Drawable কে Bitmap-এ রূপান্তর করা

Drawable থেকে Bitmap কনভার্সন: সহজ পদ্ধতি

এই টিউটোরিয়ালটি দেখাবে কীভাবে একটি Drawable রিসোর্সকে Bitmap অবজেক্টে রূপান্তর করতে হয়। এটি ইমেজ প্রসেসিং, ক্যাশিং, বা শেয়ার করার সময় খুব কাজে দেয়।

পদক্ষেপ ১: প্রজেক্ট তৈরি করুন

Android Studio-তে নতুন প্রজেক্ট তৈরি করুন।

পদক্ষেপ ২: লেআউট XML (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"
    android:orientation="vertical"
    android:padding="4dp"
    android:gravity="center"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btnConvert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Convert Drawable to Bitmap" />

</LinearLayout>

পদক্ষেপ ৩: MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    ImageView imageView;
    Button btnConvert;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageView = findViewById(R.id.imageView);
        btnConvert = findViewById(R.id.btnConvert);

        btnConvert.setOnClickListener(v -> {
            // পদ্ধতি ১: BitmapFactory.decodeResource (সরাসরি রিসোর্স থেকে)
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
            imageView.setImageBitmap(bitmap);
            Toast.makeText(this, "Method 1: decodeResource", Toast.LENGTH_SHORT).show();

            // পদ্ধতি ২: Drawable থেকে Bitmap (যদি Drawable অবজেক্ট থাকে)
            // Drawable drawable = getResources().getDrawable(R.drawable.image);
            // Bitmap bitmap2 = drawableToBitmap(drawable);
        });
    }

    // Drawable → Bitmap কনভার্টার মেথড
    public static Bitmap drawableToBitmap(Drawable drawable) {
        if (drawable instanceof BitmapDrawable) {
            return ((BitmapDrawable) drawable).getBitmap();
        }

        int width = drawable.getIntrinsicWidth();
        int height = drawable.getIntrinsicHeight();
        
        if (width <= 0 || height <= 0) {
            width = 1; height = 1; // ফলব্যাক
        }

        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        return bitmap;
    }
}

পদক্ষেপ ৪: Manifest ফাইল

সাধারণ ম্যানিফেস্ট যথেষ্ট। কোনোพิเศষ পারমিশন দরকার নেই।

দুটি পদ্ধতির পার্থক্য

পদ্ধতিব্যবহারসুবিধা
BitmapFactory.decodeResourceরিসোর্স আইডি থেকে সরাসরিসरल, দ্রুত, মেমরি কার্যকর
drawableToBitmap()Drawable অবজেক্ট থেকেরানটাইম Drawable (StateListDrawable, GradientDrawable ইত্যাদি) কাজ করে

মেমরি ম্যানেজমেন্ট টিপস

  • বড় ইমেজের জন্য `inSampleSize` ব্যবহার করুন (BitmapFactory.Options)
  • বitmap.recycle() কল করুন যখন ডন হয়ে যায় (API 10-)
  • Glide/Picasso ব্যবহার করুন অটোমেটিক মেমরি ম্যানেজমেন্টের জন্য
  • Bitmap.Config.ARGB_8888 ডিফল্ট, অ্যালফা নয় থাকলে RGB_565 বাঁচায় মেমরি
  1. অ্যান্ড্রয়েডে লাইন আঁকা (Canvas এবং Paint ব্যবহার করে)

  2. অ্যান্ড্রয়েডে এক্টিভিটির মাঝপথে Drawable পাস করা

  3. অ্যান্ড্রয়েডে ছবিকে Base64 স্ট্রিং-এ রূপান্তর করার পদ্ধতি

  4. অ্যান্ড্রয়েডে Bitmap কে Drawable-এ রূপান্তর করা