传入图片,按比例缩放拼接图片

来源:互联网 发布:手机淘宝开店怎么激活 编辑:程序博客网 时间:2024/05/29 02:39

最近由于项目需求,需要传入一个图片,然后再将图片进行比例裁剪或者放大,然后实现拼接处1080*1920+1080*1920 => 2160*1920的图片的横竖状态的两种图片。
这里写图片描述

这里写图片描述
基本上需求就是这样。
下面是实现的代码:

private Bitmap splitJoinPic(Bitmap originBitmap) {        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {            return splitJoinPicLandscape(originBitmap);        } else {            return splitJoinPicPortrait(originBitmap);        }    }    private final int SCREEN_WIDTH_SINGLE_LANDSCAPE = 1920;    private final int SCREEN_WIDTH_SINGLE_POTRAIT = 1080;    private final int SCREEN_WIDTH_DUAL_LANDSCAPE = 2160;    private final int SCREEN_WIDTH_DUAL_POTRAIT = 1920;    private final int SCREEN_HEIGHT_SINGLE_LANDSCAPE = 1080;    private final int SCREEN_HEIGHT_SINGLE_POTRAIT = 1920;    private final int SCREEN_HEIGHT_DUAL_LANDSCAPE = 1920;    private final int SCREEN_HEIGHT_DUAL_POTRAIT = 2160;    private Bitmap splitJoinPicLandscape(Bitmap originBitmap) {        Bitmap bitmapOriginal = clipWallpaper(originBitmap, SCREEN_WIDTH_SINGLE_POTRAIT, SCREEN_HEIGHT_SINGLE_POTRAIT);        Bitmap combineBitmap = Bitmap.createBitmap(SCREEN_WIDTH_DUAL_LANDSCAPE, SCREEN_HEIGHT_DUAL_LANDSCAPE, Bitmap.Config.ARGB_4444);        Canvas canvas = new Canvas(combineBitmap);        Paint paint = new Paint();        paint.setStyle(Paint.Style.FILL);        paint.setColor(Color.BLACK);        canvas.drawBitmap(bitmapOriginal, 0, 0, null);        canvas.drawRect(SCREEN_WIDTH_SINGLE_POTRAIT, 0, SCREEN_WIDTH_DUAL_LANDSCAPE, SCREEN_HEIGHT_DUAL_LANDSCAPE, paint);        return combineBitmap;    }    private Bitmap splitJoinPicPortrait(Bitmap originBitmap) {        Bitmap bitmapOriginal = clipWallpaper(originBitmap, SCREEN_WIDTH_SINGLE_LANDSCAPE, SCREEN_HEIGHT_SINGLE_LANDSCAPE);        Bitmap combineBitmap = Bitmap.createBitmap(SCREEN_WIDTH_DUAL_POTRAIT, SCREEN_HEIGHT_DUAL_POTRAIT, Bitmap.Config.ARGB_4444);        Canvas canvas = new Canvas(combineBitmap);        Paint paint = new Paint();        paint.setStyle(Paint.Style.FILL);        paint.setColor(Color.BLACK);        canvas.drawBitmap(bitmapOriginal, 0, 0, null);        canvas.drawRect(0, SCREEN_HEIGHT_SINGLE_LANDSCAPE, SCREEN_WIDTH_DUAL_POTRAIT, SCREEN_HEIGHT_DUAL_POTRAIT, paint);        return combineBitmap;    }    private Bitmap clipWallpaper(Bitmap bitmap, int targetWidth, int targetHeight) {        if (bitmap == null) {            return null;        }        int bitmapWidth = bitmap.getWidth();        int bitmapHeight = bitmap.getHeight();        float scaleOfWidth = (float) targetWidth / (float) bitmapWidth;        float scaleOfHeight = (float) targetHeight / (float) bitmapHeight;        float scaleMax = scaleOfWidth > scaleOfHeight ? scaleOfWidth : scaleOfHeight;        int scaleWidth = (int) (scaleMax * bitmapWidth);        int scaleHeight = (int) (scaleMax * bitmapHeight);        Bitmap tmpBitmap = Bitmap.createScaledBitmap(bitmap, scaleWidth, scaleHeight, false);        Bitmap result = Bitmap.createBitmap(tmpBitmap, (int) ((scaleWidth - targetWidth) / 2f), (int) ((scaleHeight - targetHeight) / 2f), targetWidth, targetHeight);        if (result != null) {            if (bitmap != result) {                bitmap.recycle();            }            if (tmpBitmap != result) {                tmpBitmap.recycle();            }        }        return result;    }
原创粉丝点击