当前位置:   article > 正文

将View转换为Bitmap的2种方式

将View转换为Bitmap的2种方式

方法1.buildDrawingCache (不推荐)

android.view.View#buildDrawingCache(boolean)

android.view.View#getDrawingCache(boolean)
  • 1
  • 2
  • 3

这2个方法配合使用使用,可以将View转换为Bitmap

缺点

1. 效率差,从源码注释可知,这个方法的使用会影响View的渲染性能,尤其是开了硬件加速的情况下,仍然会强制软件绘制一次。
2. 虽然带缩放参数,但仍然是整体绘制,效率差,费内存
3. 当View过大时容易导致卡顿。

方法2.View.draw()推荐

利用View自身的draw方法,再结合Matrix将自己的整体或者局部绘制到以Bitmap为画板的Canvas上,代码如下

/**
 * 高效的获取View的裁剪区
 * @param view 需要处理的View
 * @param crop 裁剪区域
 * @param downscaleFactor 缩放参数
 * @return
 */
public static Bitmap getDownscaledBitmapForView(View view, Rect crop, float downscaleFactor) {

    View screenView = view;

    int width = (int) (crop.width() * downscaleFactor);
    int height = (int) (crop.height() * downscaleFactor);
    float dx = -crop.left * downscaleFactor;
    float dy = -crop.top * downscaleFactor;

    if (width * height <= 0) {
        return null;
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);//准备图片
    Canvas canvas = new Canvas(bitmap);//将bitmap作为绘制画布
    Matrix matrix = new Matrix();
    matrix.preScale(downscaleFactor, downscaleFactor);
    matrix.postTranslate(dx, dy);
    canvas.setMatrix(matrix);//设置matrix
    screenView.draw(canvas);//讲View特定的区域绘制到这个canvas(bitmap)上去,
    return bitmap;//得到最新的画布
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

优势

1. 按需绘制,按需裁剪
2. 需要的内存空间更小
3. 不影响硬件加速,而且效率更高
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/262140
推荐阅读
相关标签
  

闽ICP备14008679号