把两张bitmap覆盖合成为一张图

    /** * 把两个位图覆盖合成为一个位图,以底层位图的长宽为基准 * @param backBitmap 在底部的位图 * @param frontBitmap 盖在上面的位图 * @return */    public static Bitmap mergeBitmap(Bitmap backBitmap, Bitmap frontBitmap) {        if (backBitmap == null || backBitmap.isRecycled()                 || frontBitmap == null || frontBitmap.isRecycled()) {            Log.e(TAG, "backBitmap=" + backBitmap + ";frontBitmap=" + frontBitmap);            return null;        }        Bitmap bitmap = backBitmap.copy(Config.ARGB_8888, true);        Canvas canvas = new Canvas(bitmap);        Rect baseRect  = new Rect(0, 0, backBitmap.getWidth(), backBitmap.getHeight());        Rect frontRect = new Rect(0, 0, frontBitmap.getWidth(), frontBitmap.getHeight());        canvas.drawBitmap(frontBitmap, frontRect, baseRect, null);        return bitmap;    }    /** * 把两个位图覆盖合成为一个位图,左右拼接 * @param leftBitmap * @param rightBitmap * @param isBaseMax 是否以宽度大的位图为准,true则小图等比拉伸,false则大图等比压缩 * @return */    public static Bitmap mergeBitmap_LR(Bitmap leftBitmap, Bitmap rightBitmap, boolean isBaseMax) {        if (leftBitmap == null || leftBitmap.isRecycled()                 || rightBitmap == null || rightBitmap.isRecycled()) {            JDLog.logError(TAG, "leftBitmap=" + leftBitmap + ";rightBitmap=" + rightBitmap);            return null;        }        int height = 0; // 拼接后的高度,按照参数取大或取小        if (isBaseMax) {            height = leftBitmap.getHeight() > rightBitmap.getHeight() ? leftBitmap.getHeight() : rightBitmap.getHeight();        } else {            height = leftBitmap.getHeight() < rightBitmap.getHeight() ? leftBitmap.getHeight() : rightBitmap.getHeight();        }        // 缩放之后的bitmap        Bitmap tempBitmapL = leftBitmap;        Bitmap tempBitmapR = rightBitmap;        if (leftBitmap.getHeight() != height) {            tempBitmapL = Bitmap.createScaledBitmap(leftBitmap, (int)(leftBitmap.getWidth()*1f/leftBitmap.getHeight()*height), height, false);        } else if (rightBitmap.getHeight() != height) {            tempBitmapR = Bitmap.createScaledBitmap(rightBitmap, (int)(rightBitmap.getWidth()*1f/rightBitmap.getHeight()*height), height, false);        }        // 拼接后的宽度        int width = tempBitmapL.getWidth() + tempBitmapR.getWidth();        // 定义输出的bitmap        Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);        Canvas canvas = new Canvas(bitmap);        // 缩放后两个bitmap需要绘制的参数        Rect leftRect = new Rect(0, 0, tempBitmapL.getWidth(), tempBitmapL.getHeight());        Rect rightRect  = new Rect(0, 0, tempBitmapR.getWidth(), tempBitmapR.getHeight());        // 右边图需要绘制的位置,往右边偏移左边图的宽度,高度是相同的        Rect rightRectT  = new Rect(tempBitmapL.getWidth(), 0, width, height);        canvas.drawBitmap(tempBitmapL, leftRect, leftRect, null);        canvas.drawBitmap(tempBitmapR, rightRect, rightRectT, null);        return bitmap;    }    /** * 把两个位图覆盖合成为一个位图,上下拼接 * @param leftBitmap * @param rightBitmap * @param isBaseMax 是否以高度大的位图为准,true则小图等比拉伸,false则大图等比压缩 * @return */    public static Bitmap mergeBitmap_TB(Bitmap topBitmap, Bitmap bottomBitmap, boolean isBaseMax) {        if (topBitmap == null || topBitmap.isRecycled()                 || bottomBitmap == null || bottomBitmap.isRecycled()) {            JDLog.logError(TAG, "topBitmap=" + topBitmap + ";bottomBitmap=" + bottomBitmap);            return null;        }        int width = 0;        if (isBaseMax) {            width = topBitmap.getWidth() > bottomBitmap.getWidth() ? topBitmap.getWidth() : bottomBitmap.getWidth();        } else {            width = topBitmap.getWidth() < bottomBitmap.getWidth() ? topBitmap.getWidth() : bottomBitmap.getWidth();        }        Bitmap tempBitmapT = topBitmap;        Bitmap tempBitmapB = bottomBitmap;        if (topBitmap.getWidth() != width) {            tempBitmapT = Bitmap.createScaledBitmap(topBitmap, width, (int)(topBitmap.getHeight()*1f/topBitmap.getWidth()*width), false);        } else if (bottomBitmap.getWidth() != width) {            tempBitmapB = Bitmap.createScaledBitmap(bottomBitmap, width, (int)(bottomBitmap.getHeight()*1f/bottomBitmap.getWidth()*width), false);        }        int height = tempBitmapT.getHeight() + tempBitmapB.getHeight();        Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);        Canvas canvas = new Canvas(bitmap);        Rect topRect = new Rect(0, 0, tempBitmapT.getWidth(), tempBitmapT.getHeight());        Rect bottomRect  = new Rect(0, 0, tempBitmapB.getWidth(), tempBitmapB.getHeight());        Rect bottomRectT  = new Rect(0, tempBitmapT.getHeight(), width, height);        canvas.drawBitmap(tempBitmapT, topRect, topRect, null);        canvas.drawBitmap(tempBitmapB, bottomRect, bottomRectT, null);        return bitmap;    }

记录一下

更多相关文章

  1. Android(java方法)上实现mp4的分割和拼接 (一)
  2. Android4.4 及以下TextView,Button等控件使用矢量图报错
  3. Android(安卓)Drawable之Bitmap
  4. Android(安卓)BitmapFactory图片压缩处理(大位图二次采样压缩处理
  5. Android翻页效果原理实现之翻页的尝试
  6. android 绘图 反锯齿办法
  7. Android(安卓)UI效果实现——滑动模糊渐变效果实现
  8. 彻底解决Android(安卓)拍照 内存溢出 Out of Memory的问题
  9. Android(安卓)解决 bitmap size exceed vm budget

随机推荐

  1. Android(安卓)的Camera架构介绍
  2. 对android LinearLayout中layout_weight
  3. Android:自定义控件你应该知道的这些事_Ty
  4. android gradle tools 3.X 中依赖,impleme
  5. android文件系统挂载分析(1)---正常开机
  6. Material Design:利用RecyclerView CardVi
  7. android:launchMode="singleTask" 与 onN
  8. Android开机性能分析工具 Bootchart
  9. Android(安卓)筆記-Linux Kernel SMP (Sy
  10. Vue JS 与Android(安卓)webview的交互