Android Drawable 转 Bitmap

在 Android 开发中,我们经常需要将 Drawable 转换成 Bitmap 来进行一些操作,比如显示在 ImageView 中、保存到本地等。本文将介绍如何在 Android 中将 Drawable 转换成 Bitmap,并提供代码示例。

什么是 Drawable 和 Bitmap

在 Android 中,Drawable 是一个抽象类,表示可绘制的图形,可以是图片、矢量图形或者自定义绘制。Drawable 可以通过资源文件或者代码创建。

Bitmap 是 Android 中用于表示位图的类,它是一个矩形像素数组,可以在屏幕上绘制或者保存到文件中。

Drawable 转 Bitmap

Android 提供了多种方式将 Drawable 转换成 Bitmap,下面是三种常用的方法。

方法一:使用 BitmapFactory

可以使用 BitmapFactory 的 decodeResource 方法将 Drawable 转换成 Bitmap。

Drawable drawable = getResources().getDrawable(R.drawable.my_drawable);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_drawable);

方法二:使用 Canvas

可以使用 Canvas 的 drawDrawable 方法将 Drawable 绘制到一个新创建的 Bitmap 上。

Drawable drawable = getResources().getDrawable(R.drawable.my_drawable);
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);

方法三:使用 Drawable 的 getIntrinsicWidth 和 getIntrinsicHeight 方法

可以使用 Drawable 的 getIntrinsicWidthgetIntrinsicHeight 方法获取 Drawable 的宽度和高度,然后创建一个相同尺寸的 Bitmap,再将 Drawable 绘制到 Bitmap 上。

Drawable drawable = getResources().getDrawable(R.drawable.my_drawable);
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
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);

示例代码

下面是一个简单的示例代码,展示了如何将 Drawable 转换成 Bitmap,并在 ImageView 中显示。

// 获取 Drawable
Drawable drawable = getResources().getDrawable(R.drawable.my_drawable);

// 方法一:使用 BitmapFactory
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.my_drawable);

// 方法二:使用 Canvas
Bitmap bitmap2 = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap2);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);

// 方法三:使用 Drawable 的 getIntrinsicWidth 和 getIntrinsicHeight 方法
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap3 = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap3);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);

// 在 ImageView 中显示 Bitmap
imageView1.setImageBitmap(bitmap1);
imageView2.setImageBitmap(bitmap2);
imageView3.setImageBitmap(bitmap3);

总结

本文介绍了在 Android 开发中将 Drawable 转换成 Bitmap 的三种方法,并提供了相应的代码示例。根据实际需求选择合适的方法来完成转换操作,以便在应用中更好地处理 Drawable 和 Bitmap。请根据自己的具体情况选择合适的方法,并注意内存的使用,避免出现内存溢出等问题。

gantt
    dateFormat  YYYY-MM-DD
    title       Drawable 转 Bitmap 甘特图

    section 方法一
    获取 Drawable          :active, 2023-01-01, 1d
    使用 BitmapFactory 转换 :2023-01-02, 2d

    section 方法二
    获取 Drawable          :active, 2023-01-01, 1d
    创建新的 Bitmap         :2023-01-02, 1d
    绘制 Drawable 到 Bitmap  :2023-01-03, 2d

    section 方法三
    获取 Drawable          :active, 2023-01-01, 1d
    获取 Drawable 尺寸      :2023-01-02, 1d
    创建相同尺寸的 Bitmap    :2023-01-03, 1d
    绘制 Drawable 到 Bitmap  :2023-01-04, 2d
classDiagram
    Drawable <|-- Bitmap
    Bitmap "1"