由于用 BitmapFactory 解析出来的 bitmap 对象不能更改,所以需要创建一个 bitmap 副本才能对其进行编辑(加水印,滤镜等)。
以下为步骤:
//第一步:解析出原图的 bitmap 对象,此对象权限为只读,不可编辑
Bitmap bmSrc = BitmapFactory.decodeFile("sdcard/dog.jpg");
//第二步:用原图的宽高和配置创建一个新的bitmap对象。
Bitmap bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());
//第三步:创建一个画笔对象。
Paint paint = new Paint();
//第四步:用待绘制的 bitmap 创建一个画布 (canvas) 对象
Canvas canvas = new Canvas(bmCopy);
//第五步:以原图为模板,开始绘制。
canvas.drawBitmap(bmSrc, new Matrix(), paint);
此时得到 bmCopy 即为原图 bmSrc 的副本。副本与原图一模一样,唯一的区别是原图是一成不变的(immutable ),即不可被编辑,而副本可以随意操作。