美文网首页
Bitmap Drawble Canvas

Bitmap Drawble Canvas

作者: autisticBoy | 来源:发表于2019-01-22 16:33 被阅读0次
  • bitmap是用来存放像素的

  • Canvas 本意是画布的意思,但是在Android中,它就只是一个媒介,可以通过Canvas来调用drawRect,drawCircle等等,但是实际上画的这些东西最终展现的时候都是像素,但是只有Bitmap才能保存像素,而Canvas并不行,所以在创建Canvas的时候,就必须传递一个Bitmap,用来承载画的内容。
    可以理解为 再Bitmap上铺一层画布 然后开始用paint 作画 最后还是以bitmap显示出来

  • A Drawable is a general abstraction for “something that can be drawn.”
    Drawable就是能够被画到画布上的对象。
    所以,Bitmap是一种Drawable,于是有了BitmapDrawable,颜色是一种Drawable,所以有了ColorDrawable. 形状是一种Drawable,所以有了ShapeDrawable。

关于这三者的关系 再drawble 转为bitmap时最能够体现,例如

 private Bitmap drableToBitMap(Drawable drawable) {
        int width = drawable.getIntrinsicWidth();
        int height = drawable.getIntrinsicHeight();
        Bitmap outPut = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(outPut);
        drawable.setBounds(0, 0, width, height);
        drawable.draw(canvas);
        return outPut;
    }

这段代码中可以看到首先创建了一个Bitmap,然后传入canvas中 setBounds是指drawble将被绘制在哪一块(相对于canvas的坐标),然后将drawble画上去

思考

传参时为什么要用Bitmap.create函数而不能用BitmapFactory.decodeResource(getResources(),R.drawable.demon,options);
看源码后会发现 canvas构造方法以及setBitmap方法

if (!bitmap.isMutable()) {
            throw new IllegalStateException(
                            "Immutable bitmap passed to Canvas constructor");  }

发现bitmap一定要是 mutable,而用BitmapFactory构造出来的bitmap默认isMutable是fasle的,问题解决

相关文章

网友评论

      本文标题:Bitmap Drawble Canvas

      本文链接:https://www.haomeiwen.com/subject/ukfrjqtx.html