- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Android变形(Transform)之Camera使用介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
引言 。
接android变形(transform)之matrix,来总结下camera的使用,camera主要实现3d的变形,有转动,旋转等,camera的源码是由native(本地代码)实现,提供的接口也比较简单。官方的介绍:a camera instance can be used to compute 3d transformations and generate a matrix that can be applied, for instance, on a canvas. 。
效果图 。
原图:
变形以后:
。
api使用 。
camera提供的方法如下:
save:保存当前状态 。
restore:回复当前状态 。
translate:在x,y,z三位控件内进行平移 。
rotatex:以(0.0)为中心,绕x轴进行选择 。
rotatey:以(0.0)为中心,绕y轴进行选择 。
rotatez:以(0.0)为中心,旋转(此处和matrix旋转原理一样,只不过反向相反,为逆时针) 。
... 。
常用的就这么多 。
实践 。
直接上代码:
其实camera的变化就是封装了一个matrix矩阵,可以通过getmatrix方法来获取这个坐标矩阵。在上面的demo中就用到了该方法做些额外的处理,下面具体看看:
在ondraw方法中,可以通过camera的方法来完成变形。注意11,12行,如果在ondraw的时候不进行俩行设置的话,可以看到效果如下:
。
可以看到,其按照y轴旋转中心点是(0,0),那么平常的应用而言,大多希望其中心点在图片的中心点上。所以需要加入 。
其实这一节的重点就在于剖析这俩句话.
。
从camara的api中可以看出来其不提供变形中心点的设置方法,那么怎么办呢,基本思路是:假设图片中心点为(centerx,centery),既然camera始终以(0,0)为中心点,那么我先将图形矩阵往左移动centerx,再往上移动centery,让(centerx,centery)正好掐在初始的(0,0)上,这样进行变形的话,中心点就变成了(centerx,centery),达到了目的,当然这还没结束,你既然偏移了(-centerx,-centery),那么变形以后得移回来,然后再往右下方分别移动centerx,centery.
按照矩阵的变换,可以表达为:
1,0,-centerx 1,0,centerx 。
0,1,-centery * 变形矩阵 * 0,1,centery 。
0,0,1 0,0,1 。
那么具体就如此,思路和代码结合起来怎么来解释呢,接着看,我们需要回顾下matrix中的部分知识.
回顾 。
matrix提供的三种变形方式为:set,post,pre.
set就是先reset,然后进行变形 。
pre可以解释为先乘,在矩阵原理中对应的右乘 。
post可以理解成后乘,在矩阵远离中对应左乘 。
不着急,接下俩具体看什么是先乘,后乘,什么是左乘,右乘.
举个例子:
原图 。
让一个图形按照中心点放大至2倍 。
那么期望的效果是:中心点不变(图片被边缘截断了) 。
那么按照之前提高的思路:假设中心点是(50,50)先左上移50,也即(-50,-50)再进行放大,再右下移50,也即(50,50) 。
api调用即为:setscale(2,2), pretranslate(-50,-50), posttranslate(50,50) 。
照例来说对应矩阵为:
1,0,-50 2,0,0 1,0,50 2,0,50 。
0,1,-50 * 0,0,2 * 0,1,50 = 0,2,50 。
0,0,1 0,0,1 0,0,1 0,0,1 。
可以看到结果是放大至2倍,但是却往右下移动了(50,50),奇怪要是这样的话,和预期的效果图一样预期的效果图矩阵应该为(方法至2倍,往左上移动(-50,-50)) 。
2,0,-50 。
0,2,-50.
0,0,1 。
好,揭晓下疑点:
此处api的执行顺序为:pretranslate(-50,-50) -> setscale(2,2) -> posttranslate(50,50) 没有问题 。
答案揭晓:矩阵符合变化的原则,如果图形经过f1,f2...fn此变形,对应矩阵为t1,t2...tn,符合矩阵t = tn*tn-1...*t1 。
那么正确的矩阵算法应该为 。
1,0,50 2,0,0 1,0,-50 2,0,-50 。
0,1,50 * 0,0,2 * 0,1,-50 = 0,2,-50 。
0,0,1 0,0,1 0,0,1 0,0,1 。
。
此处也解释了pre为右乘,post为左乘的原理了.
那么到此为止,一切都都得到了解释.
回归 。
回归到camera的demo当中,既然camera的变形中心点是(0,0),而且camera的变形实际是对matrix的变形,我们可以通过getmatrix方法来获取这个matrix,然后通过左移pre,变形后右移post来实现中心点的设置.
最后此篇关于Android变形(Transform)之Camera使用介绍的文章就讲到这里了,如果你想了解更多关于Android变形(Transform)之Camera使用介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 Android 中使用相机时遇到问题。 在 API 25 Nougat 7.1.1 SDK 上进行开发。最小目标 SDK 设置为 15。 每次调用时都会抛出错误: Camera camera =
在我尝试过的所有手机上,包括带有 API 2.3.7 和 4.0 的 Galaxy Nexus,在调用 takePicture 方法后表面 View 更改为拍摄的图像,即“图像查看”。 我已经在这些平
我正在尝试在 Flutter 中的相机预览上显示 CustomPaint 元素。现在,CustomPaint 元素显示在相机预览下方。我正在使用 Flutter camera plugin显示相机预览
我有一个自定义相机应用程序,它在 SurfaceView 上预览相机视频输出并尝试拍照,照片应该由“xzing”扫描仪 API 处理以解码图像中的任何条形码。 我的应用程序预览正确并且没有抛出任何错误
我已经实现了使用 Android MediaRecorder 在后台录制音频,如果录音正在进行并且用户打开了 native 摄像头来录制视频,它会提供 Camera Error "Can't Conn
我在浏览相机脚本时遇到了声明术语 new Camera camera; 我想知道这是做什么的。它是在创建一个实例吗?让我感到困惑的是脚本已经附加到 Inspector 中的相机对象。那么为什么需要创建
我使用了我的 Fabric 服务,并在大多数运行我的应用程序的设备上发现了这个错误。 错误是这样的: Fatal Exception: java.lang.NullPointerException A
private static final int SENSOR_ORIENTATION_DEFAULT_DEGREES = 90; private static final int SENSOR_OR
我正在开发一个基本的自定义相机应用这些是我的依赖 // CameraX core library dependency implementation "androidx.camera:camera-c
我正在为索尼相机制作一个跟焦应用程序。我的应用程序需要能够设置焦点标记并调用它们。有很多功能可以在 Sony Camera API 上进行自动对焦,但我希望能够手动将焦点设置为给定的绝对值。有没有办法
我已经浏览了 Nest 开发人员网站,但找不到与相机相关的任何内容。我可以找到很多关于恒温器和烟雾/一氧化碳警报器的重要信息,但没有关于相机的信息。 特别是,我正在寻找如何获取视频 URL、如何获取/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我使用 create-react-native-app (CRNA) 创建了一个 RN 项目。我想使用expo提供的Camera API。为此,我只是复制了此处的示例 https://docs.exp
我想让我的相机跟随移动实体的第一人称视角。我不相信 trackedEntity 将适用于此用例,因为我不想查看实体,但我想查看 从它。我还希望用户能够使用鼠标相对于移动实体转动相机(例如,从移动平面的
我有一个跟进问题 Android Camera Server Died and Camera ERROR 100 我的代码中出现了类似的错误。这个错误出现在我们随机运行许多应用程序的自动化测试中。很长
我正在尝试实现与 Facebook 或 Instagram 相同的功能: 即时预览相机拍摄的图像 此时,调用此函数时,我的拍摄已正确拍摄: takePicture = async function()
我想给 React native Camera 添加水印。每当我点击/拍摄图像时,应该保存带有水印的图像。 最佳答案 我用了react-native-image-marker它对我有用。 关于reac
虽然索尼向客户挑逗新相机型号(UMC-R10C、UMC-S3C)并提到 API 访问和 USB 连接(而不是 wifi),但索尼相机远程 API 目前只提到 wifi。有没有关于如何使用这些即将推出的
我正在尝试使用以下代码在我的 xamarin android 应用程序中使用相机功能。 Intent intent = new Intent(MediaStore.ActionImageCapture
我构建了一个人脸检测应用程序,我从 onPreviewFrame 获取帧,进行人脸检测,然后在 surfaceView 上方的 Canvas 上绘制一个圆圈。问题是当 Camera.StartPrev
我是一名优秀的程序员,十分优秀!