Bitmap的复制和注意

来源:互联网 发布:pony粉饼知乎 编辑:程序博客网 时间:2024/06/07 22:30

Bitmap是不能通过“ A = B ”来传递的,这样只是把B的引用给了A而已
之前做截图的时候就遇到过这个问题,但是没注意,想把截图获得的bitmap给ImageView显示,然后回收。发现报错后,就用“ = ”的方法新建了个A,同时回收B。发现还是报错,然后才想起来这个知识点。那么通过什么方法能够把Bitmap给复制过去呢?
ps:这里也说一下,不要把Bitmap像我上面那样给ImageView显示,我是为了调试的时候能更直观的看到,实际情况中,分享界面跟主界面是两个activity,这样Bitmap在分享结束后能够及时回收


复制有两个方法:
第一:copy方法:
根据该位图的大小产生一个新位图,根据指定的结构设置新位图的结构,然后把位图的像素拷贝到新位图中。如果不支持该转换,或者分配内存失败,那就返回NULL。返回的位图和原图有同样的像素密度。
参数
  config   结果图预期的结构;
  isMutable   如果是true,那么产生的图片是可变的。(比如,它的像素能被修改)
  返回值 新的位图。如果拷贝操作不能执行,则返回NULL。
  

Bitmap alterBitmap=screenBmp.copy(Bitmap.Config.ARGB_8888, true);

ALPHA_8就是Alpha由8位组成
ARGB_4444就是由4个4位组成即16位,
ARGB_8888就是由4个8位组成即32位,
RGB_565就是R为5位,G为6位,B为5位共16位


第二:新建空白bitmap,然后绘制(优点:可以进行自定义的处理)

//创建原图的一个副本。 可修改  创建的是一个空白的图形。        Bitmap alterBitmap = Bitmap.createBitmap(screenBmp.getWidth() * 2, screenBmp.getHeight() * 2, screenBmp.getConfig());        //1.准备一个画板  在上面放上准备好的 空白的位图        Canvas canvas = new Canvas(alterBitmap);        //2.准备一个画笔        Paint paint = new Paint();        paint.setColor(Color.BLACK);        //3.画画        Matrix m = new Matrix();        m.setScale(2.0f, 2.0f);        canvas.drawBitmap(screenBmp, m, paint);
原创粉丝点击