在 Android 中,你可以通过多种方式创建一个新的 Bitmap 对象,以下是几种常见的方法:
----------------------------------------------------------------------------------------------------------
方法 1:使用 Bitmap.createBitmap()(指定宽高和配置)
// 创建一个空白的 Bitmap(宽 100px,高 100px,ARGB_8888 格式)
Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
// 可选:填充颜色(例如红色)
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawRect(0, 0, 100, 100, paint);
Bitmap.Config 可选值:
ARGB_8888(默认,32 位,支持透明)
RGB_565(16 位,无透明,节省内存)
ARGB_4444(16 位,支持透明,已废弃)
ALPHA_8(8 位,仅存储透明度)
----------------------------------------------------------------------------------------------------------
方法 2:从资源文件加载 Bitmap
// 从 res/drawable 加载图片
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);
// 从 assets 文件夹加载
try (InputStream is = getAssets().open("your_image.png")) {
Bitmap bitmap = BitmapFactory.decodeStream(is);
} catch (IOException e) {
e.printStackTrace();
}
----------------------------------------------------------------------------------------------------------
方法 3:从文件路径加载 Bitmap
String imagePath = "/sdcard/Pictures/test.jpg";
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
// 可选:调整大小(防止 OOM)
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true);
----------------------------------------------------------------------------------------------------------
方法 4:从 View 生成 Bitmap
// 例如,将一个 View 转换为 Bitmap
View view = findViewById(R.id.your_view);
view.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false); // 清理缓存
----------------------------------------------------------------------------------------------------------
方法 5:从 Canvas 绘制 Bitmap
Bitmap bitmap = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
canvas.drawCircle(100, 100, 50, paint); // 画一个蓝色圆形
----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
注意事项
1. 内存管理:
~Bitmap 占用内存较大,建议用 BitmapFactory.Options 进行优化:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2; // 缩小 2 倍加载
Bitmap bitmap = BitmapFactory.decodeFile(path, options);
~使用后调用 bitmap.recycle() 释放内存(但 Android 2.3+ 后一般不需要手动回收)。
2. OOM(内存溢出)问题:
大图建议用 Glide、Picasso 等库加载。
3.线程安全:
Bitmap 操作建议在子线程进行(如 AsyncTask、RxJava、Coroutine)。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
方法 适用场景
Bitmap.createBitmap() 创建空白 Bitmap
BitmapFactory.decodeResource() 从 res/drawable 加载
BitmapFactory.decodeFile() 从文件路径加载
View.getDrawingCache() 将 View 转 Bitmap
Canvas 绘制 动态绘制图形