Android--Camera基本用法

2020-07-02 15:31:16 浏览数 (1)

在我们处理canvas平移,缩放等矩阵matrix变换中,除了自己手动操作矩阵matrix外,安卓系统还提供了一个工具类--Camera,用于3D变换计算,生成一个Matrix矩阵实例用于画布上面绘制。它的坐标系和我们canvas的绘图坐标有些区别,支持x,y,z轴,三维坐标系变换,如下图

zuobiao.png

其中初始坐标和canvas相同,为左上角,但是y轴不再是向下为正,而是和我们平时数学中的坐标系相同,这点要注意
Camera内部实际上OpenGL。很多时候我们用OpenGL做3D特效,其实Camera可以满足绝大部分的需要
下面是一张在app中没有做任何变换的图

默认.jpg

接下来,我们使用camera来对该图进行矩阵变换
代码语言:javascript复制
    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还支持旋转操作
代码语言:javascript复制
    @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

是不是有立体的感觉了,当然一般我们都是以图片的中心旋转,这个时候我们就需要操作下矩阵,让它先平移到原点,再旋转,之后再平移会原来位置
代码语言:javascript复制
    @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的基础使用就到此结束了

0 人点赞