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 বাঁচায় মেমরি