美文网首页
如何将2张图上下融合成1张

如何将2张图上下融合成1张

作者: EnzoRay | 来源:发表于2020-09-29 16:25 被阅读0次
private static final float DISPLAY_ICON_SIZE = 49 / 1.2f;

    public static Drawable mergeDrawable(Context context, Drawable backDrawable, int id, int iconSize){
        Bitmap backBitmap = DrawableToBitmap(context, backDrawable);
        backBitmap = createBitmap(backBitmap);
        Bitmap foreBitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), id));
        int width = backBitmap.getWidth() > foreBitmap.getWidth() ? backBitmap.getWidth() : foreBitmap.getWidth();
        Bitmap bitmap = Bitmap.createBitmap(iconSize, iconSize, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        canvas.drawBitmap(backBitmap, (iconSize - DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE)) / 2f - 2, (iconSize - DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE) - foreBitmap.getHeight()) / 2f + 7, null);
        canvas.drawBitmap(foreBitmap, (iconSize - foreBitmap.getWidth()) / 2f, (iconSize + DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE) - foreBitmap.getHeight()) / 2f, null);
        backBitmap.recycle();
        foreBitmap.recycle();
        Drawable drawable = new BitmapDrawable(bitmap);
        return drawable;
    }

    private static Bitmap DrawableToBitmap(Context context, Drawable drawable) {
        // 获取 drawable 长宽
        int width = drawable.getIntrinsicWidth();
        int heigh = drawable.getIntrinsicHeight();
        drawable.setBounds(0, 0, DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE), DisplayUtil.dp2px(context, DISPLAY_ICON_SIZE));

        // 获取drawable的颜色格式
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                : Bitmap.Config.RGB_565;
        // 创建bitmap
        Bitmap bitmap = Bitmap.createBitmap(width, heigh, config);
        // 创建bitmap画布
        Canvas canvas = new Canvas(bitmap);
        // 将drawable 内容画到画布中
        drawable.draw(canvas);
        return bitmap;
    }

    public static Bitmap createBitmap(Bitmap bitmap) {
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        Bitmap faceIconGreyBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(faceIconGreyBitmap);
        Paint paint = new Paint();
        ColorMatrix colorMatrix = new ColorMatrix();
        colorMatrix.setSaturation(0);
        ColorMatrixColorFilter colorMatrixFilter = new ColorMatrixColorFilter(colorMatrix);
        paint.setColorFilter(colorMatrixFilter);
        canvas.drawBitmap(bitmap, 0, 0, paint);
        return faceIconGreyBitmap;
    }

相关文章

网友评论

      本文标题:如何将2张图上下融合成1张

      本文链接:https://www.haomeiwen.com/subject/jmmeuktx.html