美文网首页
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