Clase de herramienta de mapa de bits

1. Voltear la imagen verticalmente

 /**
     * 垂直翻转
     * @param sourceBitmap
     * @return
     */
    public static Bitmap flipBitmapVertically(Bitmap sourceBitmap) {
        Matrix matrix = new Matrix();
        matrix.postScale(1, -1); // 设置垂直翻转
        return Bitmap.createBitmap(sourceBitmap, 0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight(), matrix, true);
    }

2. Escala la imagen proporcionalmente.

/**
     * 按比例缩放图片
     *
     * @param origin 原图
     * @param ratio  比例
     * @return 新的bitmap
     */
    public static Bitmap scaleBitmap(Bitmap origin, float ratio) {
        if (origin == null) {
            return null;
        }
        int width = origin.getWidth();
        int height = origin.getHeight();
        Matrix matrix = new Matrix();
        matrix.preScale(ratio, ratio);

        Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
        if (newBM.equals(origin)) {
            return newBM;
        }
        origin.recycle();
        return newBM;
    }

3. Calcule la relación de escala

 // 计算缩放比
    public static int calculateInSampleSize(BitmapFactory.Options options,
                                            int reqWidth, int reqHeight) {
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;
        if (height > reqHeight || width > reqWidth) {
            final int heightRatio = Math.round((float) height / (float) reqHeight);
            final int widthRatio = Math.round((float) width / (float) reqWidth);
            inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
        }
        return inSampleSize;
    }

4.Cambiar tamaño

 /**
     * 调整 Bitmap 的尺寸
     * @param bm
     * @param targetWidth
     * @param targetHeight
     * @return
     */
    public static Bitmap zoomImg(Bitmap bm, int targetWidth, int targetHeight) {
        int srcWidth = bm.getWidth();
        int srcHeight = bm.getHeight();
        float widthScale = targetWidth * 1.0f / srcWidth;
        float heightScale = targetHeight * 1.0f / srcHeight;
        Matrix matrix = new Matrix();
        matrix.postScale(widthScale, heightScale, 0, 0);
        // 如需要可自行设置 Bitmap.Config.RGB_8888 等等
        Bitmap bmpRet = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bmpRet);
        Paint paint = new Paint();
        canvas.drawBitmap(bm, matrix, paint);
        return bmpRet;
    }

5. Girar mapa de bits

/**
     * 旋转 Bitmap
     *
     * @param bitmap  原始 Bitmap 对象
     * @param degrees 旋转角度
     * @return 旋转后的 Bitmap 对象
     */
    public static Bitmap rotateBitmap(Bitmap bitmap, float degrees) {
        Matrix matrix = new Matrix();
        matrix.postRotate(degrees);
        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    }

6. Aplicar filtro de color al mapa de bits

/**
     * 应用颜色滤镜到 Bitmap
     *
     * @param bitmap 原始 Bitmap 对象
     * @param filter 颜色滤镜
     * @return 应用滤镜后的 Bitmap 对象
     */
    public static Bitmap applyFilter(Bitmap bitmap, ColorFilter filter) {
        Paint paint = new Paint();
        paint.setColorFilter(filter);
        Bitmap filteredBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
        Canvas canvas = new Canvas(filteredBitmap);
        canvas.drawBitmap(bitmap, 0, 0, paint);
        return filteredBitmap;
    }

7. Superponer dos mapas de bits

/**
     * 叠加两个 Bitmap
     *
     * @param bitmap1 第一个 Bitmap 对象
     * @param bitmap2 第二个 Bitmap 对象
     * @return 叠加后的 Bitmap 对象
     */
    public static Bitmap overlayBitmaps(Bitmap bitmap1, Bitmap bitmap2) {
        Bitmap mergedBitmap = Bitmap.createBitmap(bitmap1.getWidth(), bitmap1.getHeight(), bitmap1.getConfig());
        Canvas canvas = new Canvas(mergedBitmap);
        canvas.drawBitmap(bitmap1, 0, 0, null);
        canvas.drawBitmap(bitmap2, 0, 0, null);
        return mergedBitmap;
    }

8. Comprimir mapa de bits a la calidad especificada

/**
     * 将 Bitmap 压缩为指定的质量
     *
     * @param bitmap       原始 Bitmap 对象
     * @param desiredQuality 压缩的目标质量,取值范围为 0-100
     * @return 压缩后的 Bitmap 对象
     */
    public static Bitmap compressByQuality(Bitmap bitmap, int desiredQuality) {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, desiredQuality, outputStream);
        byte[] byteArray = outputStream.toByteArray();
        return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    }

9. Comprima el mapa de bits al tamaño de destino especificado

/**
     * 将 Bitmap 压缩到指定的目标大小
     *
     * @param bitmap           原始 Bitmap 对象
     * @param desiredMaxSize   压缩的目标大小,单位为字节
     * @return 压缩后的 Bitmap 对象
     */
    public static Bitmap compressBySize(Bitmap bitmap, long desiredMaxSize) {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        int quality = 100;
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
        while (outputStream.toByteArray().length > desiredMaxSize && quality > 0) {
            outputStream.reset();
            bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
            quality -= 5;
        }
        byte[] byteArray = outputStream.toByteArray();
        return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
    }

10. Comprima el mapa de bits al tamaño de destino especificado

/**
     * 将 Bitmap 压缩到指定的目标尺寸
     *
     * @param bitmap         原始 Bitmap 对象
     * @param desiredWidth   压缩后的目标宽度
     * @param desiredHeight  压缩后的目标高度
     * @return 压缩后的 Bitmap 对象
     */
    public static Bitmap compressByResolution(Bitmap bitmap, int desiredWidth, int desiredHeight) {
        return Bitmap.createScaledBitmap(bitmap, desiredWidth, desiredHeight, true);
    }

Supongo que te gusta

Origin blog.csdn.net/qq_55888300/article/details/132239306
Recomendado
Clasificación