view可通过缓存(cache)机制获取bitmap

在原图上绘图,我之前的做法是在图片上放一层Canvas但是这样有一个问题就是图片会放大然后绘图会错位
1、图片布局我设置

<com.xhly.easystud.widget.canvas.ZdyView
   android:layout_width="wrap_content"
   android:adjustViewBounds="true"
   android:layout_height="wrap_content"
   android:id="@+id/yuantu"/>

2、渲染图片我用的是glide
Glide.with(mContext).load(imageUrl).override(1600,1600).placeholder(R.drawable.c_error).into(yuantu)
3、解决办法
3.1 开启setDrawingCacheEnabled(true);
3.2 把原图加载Canvas
错误的写法:mBufferBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
正确的写法:mBufferBitmap = this.getDrawingCache(true).copy(Bitmap.Config.ARGB_8888,true);
通过缓存把图片放到画布上
4、获取绘画后的图片

/**
     * 获取缓存bitmap
     */
public Bitmap buildBitmap() {
        Bitmap bm = getDrawingCache();
        Bitmap result = Bitmap.createBitmap(bm);
        destroyDrawingCache();
        return result;
    }
/**
     * 将Bitmap转换成Base64字符串
     *quality 传入压缩率
     * @param bit 图片
     * @return base64 编码的图片
     */
    public static String Bitmap2StrByBase64(Bitmap bit,int quality) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bit.compress(Bitmap.CompressFormat.JPEG, quality, bos);//参数100表示不压缩
        byte[] bytes = bos.toByteArray();
        return Base64.encodeToString(bytes, Base64.DEFAULT);
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容