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 的 getIntrinsicWidth
和 getIntrinsicHeight
方法获取 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"