在原图上绘图,我之前的做法是在图片上放一层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);
}