美文网首页
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旋转 平移有效的样板代码

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