美文网首页
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基本用法

    在我们处理canvas平移,缩放等矩阵matrix变换中,除了自己手动操作矩阵matrix外,安卓系统还提供了一个...

  • 定时器

    setTimeout和clearTimeout基本用法 setInterval和clearInterval基本用法...

  • 2019-11-16

    E战到底DAY14 SUMIF和SUMIFS函数 一.基本用法 SUMIF基本用法 SUMIFS基本用法 SUMI...

  • 11 - 动态数据绑定实现原理

    一、defineProperty 基本用法 1、基本写法: 2、参数 3、descriptor 参数的基本用法 1...

  • as 基本用法

    插件安装 plugin auto import 相当于 eclipse ctrl+o 或者as alt+enter...

  • 基本用法

    Installation 安装 npm install vue vue-server-renderer --sav...

  • 基本用法

    html css js

  • 基本用法

    本地与远程:push 命令会把本地仓库推送到远程仓库(比如gitbub,码云)在push之前要与某个远程仓库建立连...

  • 基本用法

    TensorFlow使用图(graph)表示计算任务,图中的节点被称为op。一个Tensor一般为一个类型化的多维...

  • "?.","??","??=","!"基本用法

    空值合并操作符( ?? )ES2020 const a = b ?? c; // 解释为 如果b为null或un...

网友评论

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

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