From 132ce1840ae9818a16f9aafc9e34b829e3c41d63 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Feb 2016 21:57:02 +0800 Subject: [PATCH] Canvas --- 问题/Canvas/Canvas(3).md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/问题/Canvas/Canvas(3).md b/问题/Canvas/Canvas(3).md index fd3f611..1ac439d 100644 --- a/问题/Canvas/Canvas(3).md +++ b/问题/Canvas/Canvas(3).md @@ -216,13 +216,23 @@ public void drawPicture (Picture picture, RectF dst) 步骤 | 说明 --- | --- -1 | 使用BitmapFactory或BitmapDrawable读取一张图片,创建一个只读的Bitmap -2 | 使用Bitmap的creatXxx方法创建一个与第1步大小相同的空白Bitmap -3 | 将第1步中的只读Bitmap绘制到第2步的空白Bitmap上 -4 | 对Bitmap进行操作 +1 | 获取图片。使用BitmapFactory或BitmapDrawable获取一个只读的Bitmap。 +2 | 创建图片。使用Bitmap的creatXxx方法创建一个与第1步大小相同的空白Bitmap。 +3 | 复制图片。将第1步中的只读Bitmap绘制到第2步的空白Bitmap上。 +4 | 具体操作。对Bitmap进行操作。 +5 | 保存图片。保存Bitmap到文件。 **PS: 如果直接对只读的Bitmap操作会报异常(java.lang.IllegalStateException)** +接下来我们将会按照上面的5个步骤逐一讲解其中的要点和坑。 + +#### 获取图片 +很多文章中提到获取图片,都会提到一种使用创建BitmapDrawable的方法来获取一个Bitmap。
+
+我觉得这种方法是不太科学的,原因如下:
+> 1. Drawable对象本身就是一种包装类,主要的作用是为**不同类型**的**可绘制对象**(Color Bitmap Layer等等)提供一套**相同的操作方法(接口)**,隐藏不同类型对象底层实现的一些差异,如果仅仅用来获取一个Bitmap实在是大材小用。
+> 2. 由于各种原因,BitmapDrawable中很多比较方便的创建方法都废掉了,而且使用BitmapFactory并不比使用BitmapDrawable麻烦。
+> 3. 使用BitmapDrawable很难预防OOM(Out Of Memory 申请内存过大),而合理使用BitmapFactory基本上可以避免OOM的产生。