美文网首页
Android--Camera基本用法

Android--Camera基本用法

作者: aruba | 来源:发表于2020-02-24 11:03 被阅读0次
    在我们处理canvas平移,缩放等矩阵matrix变换中,除了自己手动操作矩阵matrix外,安卓系统还提供了一个工具类--Camera,用于3D变换计算,生成一个Matrix矩阵实例用于画布上面绘制。它的坐标系和我们canvas的绘图坐标有些区别,支持x,y,z轴,三维坐标系变换,如下图
    zuobiao.png
    其中初始坐标和canvas相同,为左上角,但是y轴不再是向下为正,而是和我们平时数学中的坐标系相同,这点要注意
    Camera内部实际上OpenGL。很多时候我们用OpenGL做3D特效,其实Camera可以满足绝大部分的需要
    下面是一张在app中没有做任何变换的图
    默认.jpg
    接下来,我们使用camera来对该图进行矩阵变换
        private Camera camera = new Camera();
        private Matrix matrix = new Matrix();
    
        @Override
        protected void onDraw(Canvas canvas) {
            matrix.reset();
            //涉及到矩阵变换,和canvas同样的,我们使用save和restore对矩阵保存和恢复
            camera.save();
            //往x,y,z方向分别平移100像素
            camera.translate(100, 100, 100);
            //每次我们都要获取下矩阵
            camera.getMatrix(matrix);
    
            camera.restore();
    
            canvas.drawBitmap(bitmap, matrix, mPaint);
        }
    
    x,y,z轴平移100像素.jpg
    很明显,在x,y,z轴平移100像素后,比原来看起来更小(远),并且,y轴平移100不再是往下平移,而是往上平移

    camera还支持旋转操作
        @Override
        protected void onDraw(Canvas canvas) {
            matrix.reset();
            //涉及到矩阵变换,和canvas同样的,我们使用save和restore对矩阵保存和恢复
            camera.save();
            //往x,y,z方向分别平移100像素
            //camera.translate(100, 100, 100);
            //绕x轴旋转45度
            camera.rotateX(45);
            //每次我们都要获取下矩阵
            camera.getMatrix(matrix);
    
            camera.restore();
    
            canvas.drawBitmap(bitmap, matrix, mPaint);
        }
    
    绕x轴45度.jpg
    是不是有立体的感觉了,当然一般我们都是以图片的中心旋转,这个时候我们就需要操作下矩阵,让它先平移到原点,再旋转,之后再平移会原来位置
        @Override
        protected void onDraw(Canvas canvas) {
            matrix.reset();
            //涉及到矩阵变换,和canvas同样的,我们使用save和restore对矩阵保存和恢复
            camera.save();
            //往x,y,z方向分别平移100像素
            //camera.translate(100, 100, 100);
            //绕x轴旋转45度
            camera.rotateX(45);
            //每次我们都要获取下矩阵
            camera.getMatrix(matrix);
    
            camera.restore();
    
            //矩阵前乘
            matrix.preTranslate(-bitmap.getWidth() / 2f,-bitmap.getHeight() / 2f);
            //矩阵后乘
            matrix.postTranslate(bitmap.getWidth() / 2f,bitmap.getHeight() / 2f);
            canvas.drawBitmap(bitmap, matrix, mPaint);
        }
    
    图片中心旋转45度.jpg
    camera的基础使用就到此结束了

    相关文章

      网友评论

          本文标题:Android--Camera基本用法

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