关于canvas.drawBitmap

本文介绍了如何使用canvas.drawBitmap方法在二维码中精确地添加Logo。详细解释了drawBitmap的各种重载方法及其参数含义,并通过实例展示了如何实现Logo的正确缩放与定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在研究二维码的生成问题时,需要用到canvas.drawBitmap,这个方法有很多重载方法,写下本人的一些见解。

1.drawBitmap(Bitmap bitmap, float left, float top, Paint paint)

这是很常用的一个方法,参数理解很简单:
bitmap:需要绘制的bitmap
left:绘制区域与左边界距离
top:绘制区域与上边界距离
paint:画笔,可为null

2.drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)

根据指定区域绘制bitmap
bitmap:需要绘制的bitmap
src:bitmap需要绘制的区域,若src的面积小于bitmap时会对bitmap进行裁剪,一般来说需要绘制整个bitmap时可以为null
dst:在画布中指定绘制bitmap的区域,当这个区域的面积与bitmap要显示的面积不匹配时,会进行拉伸,不可为null
paint:画笔,可为null

3.drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)

本质上跟2功能是一样的,区别在与RectF的参数接收的float,而Rect是int,都是指定一块区域

注:Rect(int left, int top, int right, int bottom)的四个参数指的都是距离左边界和上边界的距离,可以理解为原点做左上角,向右和向下分别为x,y,RectF同理。

4.scale(float sx, float sy, float px, float py)

sx:x轴缩放比例
sy:y缩放比例
px:缩放中心x
py:缩放中心y
下面放上将logo添加至图片中心例子:

private Bitmap addScaleLogo(Bitmap QRBitmap, Bitmap logo) {
        Bitmap blankBitmap = Bitmap.createBitmap(QRBitmap.getWidth(), QRBitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(blankBitmap);
        canvas.drawBitmap(QRBitmap, 0, 0, null);
//        canvas.save();
        float scaleX = (float) (QRBitmap.getWidth()/5.0/ logo.getWidth());
        float scaleY = (float) (QRBitmap.getHeight()/5.0 / logo.getHeight());
        canvas.scale(scaleX,scaleY, (float) (QRBitmap.getWidth()/2.0),(float) (QRBitmap.getHeight()/2.0));
//此时画笔已按比例在中心缩放,所以放进去的东西都会缩放,故left和top还是原来的
        canvas.drawBitmap(logo, ((float)((QRBitmap.getWidth() - logo.getWidth())/2.0)), ((float)((QRBitmap.getHeight() - logo.getHeight())/2.0)),null);
//        canvas.restore();
        return blankBitmap;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值