美文网首页
bitmap旋转 平移有效的样板代码

bitmap旋转 平移有效的样板代码

作者: 吉凶以情迁 | 来源:发表于2021-08-24 21:09 被阅读0次

哎、不服老不行了,现在基础都给搞懵逼了。

bitmap旋转90 ,测试是居中旋转的,之前不是距中旋转的代码我有空看看比较下。

    public static 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
     * @param x
     * @param y
     * @return
     */
    public static Bitmap translateBitmap(Bitmap origin, float x,float y) {
//        Bitmap returnBitmap = Bitmap.createBitmap(origin,0,0,origin.getWidth(),origin.getHeight());
        Bitmap returnBitmap = Bitmap.createBitmap(origin.getWidth(),origin.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas=new Canvas(returnBitmap);
//2.设置画笔
//        Paint paint=new Paint();
//        paint.setColor(Color.BLACK);
//        canvas.drawColor(Color.WHITE);
//        paint.setAntiAlias(true);  //消除锯齿
//3.画位图

        Matrix matrix=new Matrix();
        matrix.postTranslate(x, y);
        canvas.drawBitmap(origin,matrix, null);

        return returnBitmap;

平移下面这样写无法平移没有效果的 ,目前没搞懂原因,可能是要进行所谓的其他缩放等操作,百思不得其解,

    public static Bitmap rotateBitmap(Bitmap origin, float x,float y) {
        if (origin == null) {
            return null;
        }
        int width = origin.getWidth();
        int height = origin.getHeight();
        Matrix matrix = new Matrix();
        matrix.postTranslate(x,y);
        // 围绕原地进行旋转
        Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
        if (newBM.equals(origin)) {
            return newBM;
        }
        origin.recycle();
        return newBM;
    }

之前可能是即时运行问题现在又可以了


    public static Bitmap adjustPhotoRotation(Bitmap bm, final int orientationDegree) {

        Matrix m = new Matrix();
        m.setRotate(orientationDegree, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2);
        float targetX, targetY;
        if (orientationDegree == 90) {
            targetX = bm.getHeight();
            targetY = 0;
        } else {
            targetX = bm.getHeight();
            targetY = bm.getWidth();
        }

        final float[] values = new float[9];
        m.getValues(values);

        float x1 = values[Matrix.MTRANS_X];
        float y1 = values[Matrix.MTRANS_Y];

        m.postTranslate(targetX - x1, targetY - y1);

        Bitmap bm1 = Bitmap.createBitmap(bm.getHeight(), bm.getWidth(), Bitmap.Config.ARGB_8888);


        Paint paint = new Paint();
        Canvas canvas = new Canvas(bm1);
        canvas.drawBitmap(bm, m, paint);

        return bm1;
    }

相关文章

  • bitmap旋转 平移有效的样板代码

    哎、不服老不行了,现在基础都给搞懵逼了。 bitmap旋转90 ,测试是居中旋转的,之前不是距中旋转的代码我有空看...

  • 图片上下文的矩阵操作(平移,旋转,缩放)

    原图 平移 旋转 缩放 具体代码如下

  • Bitmap方法总汇

    Bitmap缩放 Bitmap裁剪 Bitmap旋转

  • 晶体学笔记15:晶体的微观对称性-操作和轴

    微观对称操作有平移、旋转-平移、反映-平移,他们相应的对称元素是平移轴、螺旋轴和滑移面。 平移操作和平移轴 旋转-...

  • Cesium gltf模型姿态动态调整

    Cesium 动态调整 gltf模型姿态:包含中心点、平移、旋转、缩放。 效果 代码

  • transform

    平移,伸缩,旋转,倾斜 translateX:x轴平移 scaleX:伸缩 rotateX:旋转 skewX :倾斜

  • 基本变换矩阵

    1 平移变换 平移矩阵 T 平移后的新点 2 旋转矩阵 旋转矩阵用、、 分别表示 对一个绕任意轴旋转角度的旋转矩阵...

  • android 动画-补间动画

    补间动画包含渐变Alpha、旋转Rotate、缩放Scale、平移Translate 布局代码 rotate、sc...

  • 旋转平移

    二维旋转 三角函数展开: 带入xy公式: 转为矩阵形式: 二维绕点旋转,旋转矩阵对角记忆 加入平移引入齐次坐标: ...

  • 矩阵变换

    摘自:旋转变换(一)旋转矩阵 平移矩阵 tx表示:在x轴方向上平移距离ty表示:在y轴方向上的平移距离 旋转矩阵 ...

网友评论

      本文标题:bitmap旋转 平移有效的样板代码

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