1 读取图片
2 Drawable和Bitmap之间的转换
2.1 Drawable >> Bitmap
我们经常提到的Drawable只是一个抽象类,开发过程中我们是实际打交道的是它的派生类,例如BitmapDrawable(png图片)、GradientDrawable(xml图片)等。如果给定的drawable是BimapDrawable的实例,我们可以直接调用它的getBitmap方法,否则就创建一个bitmap,并把drawable绘制到bitmap上。
public static final Bitmap drawableToBitmap(Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } else { //根据创建一个和drawable同尺寸的bitmap Bitmap bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), //判断drawable的像素格式ARGB or RGB,即有没有透明度 如果没有透明度的话,选择RGB_565,节省了存储透明度的空间 drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565); //以bitmap为底板创建画布,draw在canvas上实际上就是draw在了bitmap上 Canvas canvas = new Canvas(bitmap); //draw()实际上是根据drawable的bounds来确定绘制位置,所以要先设置bounds drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); //把drawable绘制在画布上 drawable.draw(canvas); return bitmap; } }
上面的代码涉及到了Bitmap.Config,关于它的详细介绍可以参考这篇文章:
2.2 Bitmap >> Drawable
通过BitmapDrawable即可将Bitmap转化为Drawable:
public static final Drawable bitmapToDrawable(Bitmap bitmap){ return new BitmapDrawable(bitmap); }