- 浏览: 7935360 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
Android 中的camera的使用是个很普遍的用法,今天小结下其使用步骤,翻译自http://mobile.tutsplus.com/tutorials/android/android-essentials-create-a-mirror/
1) 设计界面,如下
2 开始调用摄象头,在其oncreate事件中,如下代码:
这里mCameraId = findFirstFrontFacingCamera();
首先找出前置摄象头,有个findFirstFrontFacingCamera()的方法,代码如下:
其实就是一个循环找出其前置摄象头
3 接下来startCameraInLayout(mPreviewLayout, mCameraId);
就是打开这个前置摄象头,将捕捉到的图象放到屏幕的界面上来,代码如下:
4 下面重点来看MirrorView类
这个类其实是继承了SurfaceView类,如下,这个其实就是让camera直接写surface了
5 最后还要适当调整下图片的比例:
6 最后要做些清理工作,分别为onresume和onpause事件
完整的代码还包括判断是否有摄象头,以及拍下照片保存到文件中去,详细代码见附件,
1) 设计界面,如下
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/camPreview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" > </FrameLayout> <Button android:id="@+id/capture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="@string/capture" /> </RelativeLayout>
2 开始调用摄象头,在其oncreate事件中,如下代码:
private Camera mCam; private MirrorView mCamPreview; private int mCameraId = 0; private FrameLayout mPreviewLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mCameraId = findFirstFrontFacingCamera(); mPreviewLayout = (FrameLayout) findViewById(R.id.camPreview); mPreviewLayout.removeAllViews(); startCameraInLayout(mPreviewLayout, mCameraId); }
这里mCameraId = findFirstFrontFacingCamera();
首先找出前置摄象头,有个findFirstFrontFacingCamera()的方法,代码如下:
private int findFirstFrontFacingCamera() { int foundId = -1; // find the first front facing camera int numCams = Camera.getNumberOfCameras(); for (int camId = 0; camId < numCams; camId++) { CameraInfo info = new CameraInfo(); Camera.getCameraInfo(camId, info); if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { Log.d(DEBUG_TAG, "Found front facing camera"); foundId = camId; break; } } return foundId; }
其实就是一个循环找出其前置摄象头
3 接下来startCameraInLayout(mPreviewLayout, mCameraId);
就是打开这个前置摄象头,将捕捉到的图象放到屏幕的界面上来,代码如下:
private void startCameraInLayout(FrameLayout layout, int cameraId) { mCam = Camera.open(cameraId); if (mCam != null) { mCamPreview = new MirrorView(this, mCam); layout.addView(mCamPreview); } }
4 下面重点来看MirrorView类
这个类其实是继承了SurfaceView类,如下,这个其实就是让camera直接写surface了
public class MirrorView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; private Camera mCamera; public MirrorView(Context context, Camera camera) { super(context); mCamera = camera; mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { try { mCamera.setPreviewDisplay(holder); mCamera.startPreview(); } catch (Exception error) { Log.d(DEBUG_TAG, "Error starting mPreviewLayout: " + error.getMessage()); } } public void surfaceDestroyed(SurfaceHolder holder) { } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { if (mHolder.getSurface() == null) { return; } // can't make changes while mPreviewLayout is active try { mCamera.stopPreview(); } catch (Exception e) { } try { // set rotation to match device orientation setCameraDisplayOrientationAndSize(); // start up the mPreviewLayout mCamera.setPreviewDisplay(mHolder); mCamera.startPreview(); } catch (Exception error) { Log.d(DEBUG_TAG, "Error starting mPreviewLayout: " + error.getMessage()); } }
5 最后还要适当调整下图片的比例:
public void setCameraDisplayOrientationAndSize() { CameraInfo info = new CameraInfo(); Camera.getCameraInfo(mCameraId, info); int rotation = getWindowManager().getDefaultDisplay().getRotation(); int degrees = rotation * 90; /* * // the above is just a shorter way of doing this, but could break * if the values change switch (rotation) { case Surface.ROTATION_0: * degrees = 0; break; case Surface.ROTATION_90: degrees = 90; * break; case Surface.ROTATION_180: degrees = 180; break; case * Surface.ROTATION_270: degrees = 270; break; } */ int result; if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; } else { result = (info.orientation - degrees + 360) % 360; } mCamera.setDisplayOrientation(result); Camera.Size previewSize = mCam.getParameters().getPreviewSize(); if (result == 90 || result == 270) { // swap - the physical camera itself doesn't rotate in relation // to the screen ;) mHolder.setFixedSize(previewSize.height, previewSize.width); } else { mHolder.setFixedSize(previewSize.width, previewSize.height); } }
6 最后要做些清理工作,分别为onresume和onpause事件
@Override protected void onResume() { super.onResume(); if (mCam == null && mPreviewLayout != null) { mPreviewLayout.removeAllViews(); startCameraInLayout(mPreviewLayout, mCameraId); } } @Override protected void onPause() { if (mCam != null) { mCam.release(); mCam = null; } super.onPause(); }
完整的代码还包括判断是否有摄象头,以及拍下照片保存到文件中去,详细代码见附件,
- android.rar (70.9 KB)
- 下载次数: 391
发表评论
-
『Google发布移动Web性能工具PCAP Web Performance Analyzer』
2015-01-06 14:17 2234http://t.cn/RZcCwZS 最近,Google的 ... -
(收藏)在WebView中如何让JS与Java安全地互相调用
2014-11-11 09:59 869在WebView中如何让JS与Java安全地互相调用 http ... -
android中的两端对齐
2013-02-08 18:58 3143在android中的webview中,可以对文本内容进行对 ... -
jQuery Mobile十大常用技巧
2012-10-12 07:23 4271原文发表在: http://mobile.51cto.com/ ... -
Android中使用log4j
2012-10-09 20:22 18331如果要直接在android工程中使用log4j,是有点问题 ... -
收集android的三个小tip
2012-08-25 11:24 2147收集android的三个小tip 1)Android 开发中 ... -
andorid中的html.fromhtml方法
2012-08-19 21:24 8847在android中,有一个容易遗忘的Html.fromht ... -
一个不错的sencha touch MVC教程分享
2012-08-18 10:06 2866http://blog.csdn.net/fyq891014/ ... -
jquery mobile中的按钮大集合
2012-08-14 22:17 3936本文小结了jquery mobile ... -
Andrid中的plurals
2012-08-10 19:29 1751在Android中的字符串资源中,今天留意到一个很特别的东 ... -
Android中listview中的button
2012-08-08 12:56 1979在androd中的listview中,假如每一项是个buu ... -
如何有更好的Android应用创意--从一款新Android应用说起
2012-07-20 14:23 5719现在这个年头,Android ... -
android中判断网络是否连接
2012-07-12 23:19 2936在android中,如何监测网络的状态呢,这个有的时候也是十分 ... -
android中设置手机的语言系
2012-05-19 15:55 2759adb shell 进入Android的Shell,输入以下命 ... -
android 按钮设计中state_selected属性
2012-05-15 22:33 8498在android中,如果搞几个tab,然后想做到当移动到某个T ... -
android中从图库中选取图片
2012-05-11 21:03 10285在android中,如何从图库gallary中挑选图片呢, ... -
android 模拟器中启用相机API支持
2012-05-10 22:37 3185android 模拟器中启用相机支持,否则如果应用中用到相关的 ... -
(转)向android模拟器打电话发短信的简单方法
2012-04-13 13:00 1999http://blog.csdn.net/pku_androi ... -
android 中让activity全屏幕显示
2012-04-12 09:06 1685android 中让activity全屏幕显示,这是一个小ti ... -
在Android中加入GOOGLE统计系统
2012-03-31 20:43 3462Google的统计分析系统,不仅在传统WEB统计中应用很广 ...
相关推荐
总结来说,“Android Camera使用实例”涵盖了Android平台上的相机集成,从基础的拍照和录像,到高级的参数控制和实时图像处理。通过理解并实践这些知识点,开发者可以创建功能丰富的相机应用,满足用户的各种需求。
自己总结的Android Camera系统架构及源码分析,以framework和hal为主。
总结,掌握Android原生Camera2 API不仅需要理解各种类和接口的用法,还需要熟悉Android的生命周期管理和多线程处理。通过实践和调试CameraDemo2这样的示例项目,开发者可以逐步提高在Android相机开发上的技能。
总结来说,Android原生的人脸识别功能可以通过`Camera`和`Camera2` API实现。`Camera` API适合简单的应用,而`Camera2` API则为需要精细控制和高性能的应用提供了更多可能。开发者应根据项目需求和目标平台选择合适...
总结来说,“android Camera源码(可用)”是一个有价值的资源,可以帮助开发者深入了解Android相机功能的实现,提升他们在实际项目中的开发效率和质量。通过阅读和分析这个源码,开发者可以更好地理解和掌握Camera ...
`Camera`类的使用涉及到权限设置,如需访问相机,需要在`AndroidManifest.xml`中声明`<uses-permission android:name="android.permission.CAMERA" />`。 ### 摄像头预览 在Android相机应用中,首先需要创建一个...
(精品)Android Camera分析(整理).pdf Android 的Camera架构介绍.pdf Camera模块解析驱动.pdf ...学习camera framework 总结.pdf Android框架下Camera的设计与实现.pdf android_Camera框架分析.pdf
总结,"android-Camera2Basic-master"源码为我们提供了一个了解和学习Camera2 API的良好起点。通过对源码的详细解读,开发者能更好地理解和实践如何在Android应用中集成和控制相机,从而创建出更丰富的相机功能。
总结,AndroidCamera2BasicApp作为学习和实践Camera2 API的实例,帮助我们理解如何利用新API实现一个基本的相机应用。通过深入研究和实践,开发者可以进一步开发出满足专业摄影需求的复杂应用,提升Android设备的...
在具体实现代码之前,我们先来了解一下Android api对实现自定义Camera的介绍。 根据api的介绍,对于Camera应用可以简单总结以下几个步骤。 1.检查Camera是否存在,并在AndroidManifest.xml中赋予相关的权限; 2....
总结来说,Android的HAL层下的camera实现是一个复杂的系统工程,涉及到硬件驱动、接口定义、流处理、性能优化等多个方面。虽然这部分代码不对外公开,但了解其工作原理对于Android相机应用的开发者和系统工程师而言...
由于Android 6.0(Marshmallow)引入了运行时权限,所以在使用相机前,需要检查并请求用户授予CAMERA权限。 六、其他高级特性 - 视频录制:Camera1 API使用MediaRecorder,Camera2 API通过VideoCapture类。 - 实时...
在Framework层中,`android.hardware.camera`类提供了必要的接口供应用层使用,其内部则是通过JNI技术调用Native代码来完成实际的功能实现。 ##### 2.1 Parameters类详解 `Parameters`类是一个重要的组成部分,它...
### Android Camera调试总结 在Android系统的开发过程中,经常会遇到与Camera相关的各种问题,这些问题往往涉及到硬件、驱动以及软件等多个层面。本文将根据实际项目经验,总结归纳几个在Android平台上进行Camera...
总结,Android 4.0的Camera API改进显著提升了相机功能的可定制性和性能,为开发者提供了更多创造出色拍照和录像应用的可能性。理解和熟练运用这两个API对于Android应用开发尤其是摄影类应用至关重要。
总结来说,Android Camera API提供了一套完整的框架,用于实现相机数据的预览和处理。通过自定义相机视图,我们可以实时获取到相机的帧数据,然后进行图像转换和处理,例如面部识别。利用定时任务,可以按照指定频率...
总结,Android 4.0 Camera源码包含了从硬件抽象层到用户界面的整个摄像头系统的实现,涉及设备管理、参数设置、预览、拍照、录像等多个环节。理解这些核心概念和机制对于开发复杂的相机应用或优化现有功能至关重要。...