Android Bitmap转换操作:缩放、裁剪、旋转、偏移

22人阅读 评论(0) 收藏 举报
分类:

原文链接

/**
     * 根据给定的宽和高进行拉伸
     *
     * @param origin    原图
     * @param newWidth  新图的宽
     * @param newHeight 新图的高
     * @return new Bitmap
     */
    private Bitmap scaleBitmap(Bitmap origin, int newWidth, int newHeight) {
        if (origin == null) {
            return null;
        }
        int height = origin.getHeight();
        int width = origin.getWidth();
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);// 使用后乘
        Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
        if (!origin.isRecycled()) {
            origin.recycle();
        }
        return newBM;
    }

    /**
     * 按比例缩放图片
     *
     * @param origin 原图
     * @param ratio  比例
     * @return 新的bitmap
     */
    private 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;
    }

    /**
     * 裁剪
     *
     * @param bitmap 原图
     * @return 裁剪后的图像
     */
    private Bitmap cropBitmap(Bitmap bitmap) {
        int w = bitmap.getWidth(); // 得到图片的宽,高
        int h = bitmap.getHeight();
        int cropWidth = w >= h ? h : w;// 裁切后所取的正方形区域边长
        cropWidth /= 2;
        int cropHeight = (int) (cropWidth / 1.2);
        return Bitmap.createBitmap(bitmap, w / 3, 0, cropWidth, cropHeight, null, false);
    }

    /**
     * 选择变换
     *
     * @param origin 原图
     * @param alpha  旋转角度,可正可负
     * @return 旋转后的图片
     */
    private Bitmap rotateBitmap(Bitmap origin, float alpha) {
        if (origin == null) {
            return null;
        }
        int width = origin.getWidth();
        int height = origin.getHeight();
        Matrix matrix = new Matrix();
        matrix.setRotate(alpha);
        // 围绕原地进行旋转
        Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
        if (newBM.equals(origin)) {
            return newBM;
        }
        origin.recycle();
        return newBM;
    }

    /**
     * 偏移效果
     * @param origin 原图
     * @return 偏移后的bitmap
     */
    private Bitmap skewBitmap(Bitmap origin) {
        if (origin == null) {
            return null;
        }
        int width = origin.getWidth();
        int height = origin.getHeight();
        Matrix matrix = new Matrix();
        matrix.postSkew(-0.6f, -0.3f);
        Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
        if (newBM.equals(origin)) {
            return newBM;
        }
        origin.recycle();
        return newBM;
    }
查看评论

Unity视角旋转/摄像机围绕人物旋转

-
  • 1970年01月01日 08:00

android 常用Bitmap处理方法收集:普通裁剪,缩放,圆形裁剪

代码是平常使用时收集的,并不是我本人所写。这些bitmap处理方法在我的android程序里面使用相对较多,希望对大家也有些帮助。 import android.graphics.Bitmap; im...
  • qq_27856623
  • qq_27856623
  • 2017-03-21 11:21:06
  • 1208

赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印

上一篇已经介绍了Android种Bitmap和Canvas的使用,下面我们来写一个具体实例 http://blog.csdn.net/zhaoyazhi2129/article/details/32...
  • zhaoyazhi2129
  • zhaoyazhi2129
  • 2014-06-18 16:34:58
  • 4567

Fresco 二三事:图片处理之旋转、缩放、裁剪切割图片

关于Fresco加载图片的处理,例如旋转、裁剪切割图片,在官方文档也都有提到,只是感觉写的不太详细,正好最近项目里有类似需求,所以分享一些使用小tip,后面的朋友就不用再走弯路浪费时间了。...
  • yazhi1992
  • yazhi1992
  • 2016-12-03 13:24:05
  • 2223

android中Bitmap用法(显示,保存,缩放,旋转)实例分析

博客源址:android中Bitmap用法(显示,保存,缩放,旋转)实例分析 博客时间:2015 本文实例讲述了android中Bitmap用法。分享给大家供大家参考。具体如下: ...
  • Buaaroid
  • Buaaroid
  • 2015-12-23 20:10:41
  • 1389

Bitmap和Canvas的平移、缩放、旋转

Matrix matrix = new Matrix(); matrix.postTranslate(tx, ty); matrix.postScale(scale, scale); canv...
  • xjwangliang
  • xjwangliang
  • 2014-01-07 11:39:50
  • 2391

Android matrix偏移(平移),旋转,缩放,倾斜的原理

尊重原创,原文出处:http://blog.csdn.net/pathuang68/article/details/6991867 第一部分 Matrix的数学原理 在Android中,如果你用M...
  • hnulwt
  • hnulwt
  • 2015-01-16 23:09:04
  • 2341

bitmap缩放剪裁图片(等宽裁中间部分高)

/** * 缩放截取宽度固定高度正中部分后的位图。 * * @param bitmap 原图 */ public static Bitmap centerRect...
  • csdnwr
  • csdnwr
  • 2016-07-28 12:03:10
  • 800

Android 绘图基础:Bitmap(位图)与Matrix(矩阵)实现图片5种操作(平移、旋转、错切、缩放、对称)

Android的Matrix利用数学原理实现图片平移、旋转等操作详解   很庆幸自己的线性代数学的还可以,理解Matrix的矩阵变换完全没有问题。Matrix矩阵实现图片的平移旋转等操作涉及到线性代...
  • danfengw
  • danfengw
  • 2015-09-17 22:27:11
  • 4335

Android图片裁剪----移动、缩放图片进行裁剪

前面已经实现过图片裁剪功能,是通过移动取景框的方式裁剪的(Android 图片裁剪、添加水印(仿食色)、添加标签(仿nice)),无奈需求变更,需要以移动图片的方式,悲催的程序猿心中一万只XX马飞过....
  • u010057266
  • u010057266
  • 2014-12-15 18:33:08
  • 1923
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 912
    排名: 5万+
    最新评论