Android canvas.drawBitmap实现图片拼接

Android 专栏收录该内容
25 篇文章 0 订阅
 /***
     * 返回与显示控件宽高比相同的图片
     * @param bitmap        原图
     * @param widthImgv     ImageView的宽
     * @param heightImgv    ImageView的高
     * @return 裁剪或者拼接后后的图片
     */
    private Bitmap clipBitmap(Bitmap bitmap,int widthImgv,int heightImgv) {
        Log.i(TAG,"bitmap = "+bitmap.getWidth()*bitmap.getHeight());
        //显示的 ImageView 的高宽比
        float ratio = heightImgv * 1.0f / widthImgv;
        //bitmap的宽高
        int widthBitmap = bitmap.getWidth();
        int heightBitmap = bitmap.getHeight();
        //按照显示的 ImageView 的高宽比来的话,bitmap应该有的高度
        int finalHeight = (int) (widthBitmap * ratio);

        if (finalHeight < heightBitmap){
            // 创建空得背景bitmap,宽:原图的宽,高:最终高finalHeight
            Bitmap resultBitmap = Bitmap.createBitmap(widthBitmap, finalHeight, Bitmap.Config.RGB_565);
            // 使用空白图片生成canvas
            Canvas canvas = new Canvas(resultBitmap);

            //源图-尺寸
            Rect srcRect = new Rect(0, 0,widthBitmap,finalHeight);
            //目标-位置
            Rect dstRect = new Rect(0, 0, widthBitmap,finalHeight);
            canvas.drawBitmap(bitmap, srcRect, dstRect, null);
            return resultBitmap;
        }else {
            //图片高度不够,还差的高度,用空白背景渲染(黑色或者白色等)
            int marginHeight = finalHeight - heightBitmap;
            // 创建空得背景bitmap,宽:原图的宽,高:最终高finalHeight
            Bitmap resultBitmap = Bitmap.createBitmap(widthBitmap, finalHeight, Bitmap.Config.RGB_565);
            // 使用空白图片生成canvas
            Canvas canvas = new Canvas(resultBitmap);
            //第一步先把原图全部画上去
            //源图-尺寸
            Rect srcRect = new Rect(0, 0,widthBitmap,heightBitmap);
            //目标-位置
            Rect dstRect = new Rect(0, 0, widthBitmap,heightBitmap);
            canvas.drawBitmap(bitmap, srcRect, dstRect, null);
            //第二步,将留白画上
            Bitmap emptyBitmap = Bitmap.createBitmap(widthBitmap,marginHeight,Bitmap.Config.RGB_565);
            emptyBitmap.eraseColor(Color.WHITE);
            //源图-尺寸
            Rect srcRect2 = new Rect(0, 0,widthBitmap,marginHeight);
            //目标-位置
            Rect dstRect2 = new Rect(0, heightBitmap, widthBitmap,finalHeight);
            canvas.drawBitmap(emptyBitmap,srcRect2,dstRect2,null);
            return resultBitmap;
        }
    }

  • 0
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值