关于canvas.drawBitmap

xiaoxiao2021-02-27  322

最近在研究二维码的生成问题时,需要用到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; }
转载请注明原文地址: https://www.6miu.com/read-1735.html

最新回复(0)