camera相关知识
-
Android Camera 系列(二)控制CameraCamera系列文章首发于 我的慕课网,欢迎关注。 概述 Camera 可能是接下来个人想深入学习的课题,准备新起一个系列,从个人的角度总结阐述自己对于 Android Camera 的研究过程,希望也能够对其他想学习 Camera 的同学一些帮助。 本小节内容为 Android Camera 官方文档 的精要翻译,原文请参考: Android Camera: Control the camera 一、打开相机对象 获取Camera对象的实例是自定义相机的第一步。 作为Android的 自定义相机应用,更推荐是启动一个单独的线程并在onCreate(
-
Android Camera(5)---Android Camera调用流程Android Camera调用流程http://blog.csdn.net/lushengchu_luis/article/details/110330951、Packages/apps/到framework 打开Camera./packages/apps/Camera/src/com/android/camera/Camera.java进来第一个肯定是onCreate(Bundle icicle) {这里是开始了一个Camera的线程//start camera opening processmCameraStartUpThread = new CameraStartUpThread(); CameraStarUpThread是一个类/// M: open camera process functions @{ private class CameraStartUpThread&
-
Android Camera 系列(三)Camera API 详解Camera 系列文章首发于 我的慕课网,欢迎关注。 概述 Camera 可能是接下来个人想深入学习的课题,准备新起一个系列,从个人的角度总结阐述自己对于 Android Camera 的研究过程,希望也能够对其他想学习 Camera 的同学一些帮助。 本小节内容为 Android Camera 官方文档 的精要翻译,原文请参考: Android Camera: Camera API 正文 Android Framework 包括对设备上可用的摄像头和摄像头功能的支持,以达到在应用程序中 拍照和录制视频 的目的。 本文档讨论了一种快速,
-
Android Camera设置setPreviewCallback1 概述通过Android Camera拍摄预览中设置setPreviewCallback实现onPreviewFrame接口,实时截取每一帧视频流数据2 知识点① Android Camera使用: 参考 Refs/Related 0-4Camera 支持格式拍照流程② Android SurfaceView使用: 参考 Refs/Related 5-10③ Camera权限3 核心源码① SurfaceView相关 // 定义对象 private SurfaceView mSurfaceview = null; // SurfaceView对象:(视图组件)视频显示 private SurfaceHolder mSurfaceHolder = null; // SurfaceHo
camera相关课程
-
Android摄像头基础 本课程为Android摄像头的课程讲解。由浅入深,带领小伙伴们探索Camera的奥秘,带大家学会摄像头的摄像原理和底层的实现。
讲师:eclipse_xu 高级 43362人正在学习
camera相关教程
- 3. Camera 使用示例 使用 API 来拍照会相对比较麻烦一点,首先需要获取权限,那么对于 Android 6.0 版本以上的系统除了要在 Manifest 里面加入 Camera 权限之外,还需要动态获取权限,这个可能大家在用一些比较老的教程示例时会踩坑。获取到权限就可以打开 Camera 了,然后拿到 Camera 实例设置一个 SurfaceView 来渲染预览页面,在用户需要拍照的时候调用 Camera 的takePicture()方法获取当前帧,最后保存输出到文件中或者在新的 Activity 中展示,这样就算完成了一次拍照闭环。
- 3.1 Camera 拍照逻辑 首先看看整个拍照的代码如下:package com.emercy.myapplication;import android.Manifest;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageManager;import android.hardware.Camera;import android.os.Build;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.Button;import android.widget.Toast;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class MainActivity extends Activity { public static final String CAMERA_PATH = "path"; public static final String CAMERA_IMG = "img"; private SurfaceView mSurfaceView; private Button mTakePhoto; private Camera mCamera = null; private SurfaceHolder.Callback mCallback = new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { startPreview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { stopPreview(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getPermission(); bindViews(); } /** * 获取权限 */ private void getPermission() { if (Build.VERSION.SDK_INT > 22) { if (checkSelfPermission(android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //先判断有没有权限 ,没有就在这里进行权限的申请 requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100); } else { //说明已经获取到摄像头权限了 Log.i("Imooc Camera", "已经获取了权限"); } } else { //这个说明系统版本在6.0之下,不需要动态获取权限。 Log.i("Imooc Camera", "这个说明系统版本在6.0之下,不需要动态获取权限。"); } } private void bindViews() { mSurfaceView = (SurfaceView) findViewById(R.id.sfv_preview); mTakePhoto = (Button) findViewById(R.id.btn_take); mSurfaceView.getHolder().addCallback(mCallback); mTakePhoto.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCamera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { String path; if (TextUtils.isEmpty(path = savePhoto(data))) { Intent it = new Intent(MainActivity.this, PreviewActivity.class); it.putExtra(CAMERA_PATH, path); startActivity(it); } else { Toast.makeText(MainActivity.this, "拍照失败", Toast.LENGTH_SHORT).show(); } } }); } }); } private String savePhoto(byte[] bytes) { try { File file = File.createTempFile(CAMERA_IMG, ""); FileOutputStream fos = new FileOutputStream(file); fos.write(bytes); fos.flush(); fos.close(); return file.getAbsolutePath(); } catch (IOException e) { e.printStackTrace(); } return ""; } private void startPreview() { mCamera = Camera.open(); try { mCamera.setPreviewDisplay(mSurfaceView.getHolder()); mCamera.setDisplayOrientation(90); // 让相机旋转90度 mCamera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } private void stopPreview() { mCamera.stopPreview(); mCamera.release(); mCamera = null; }}里面涉及到的几个新概念大家需要注意,然后记得在SurfaceHolder.Callback()的surfaceCreated()中启动预览,在surfaceDestroyed()方法中要停止预览,其他的基本上按照步骤来不会有什么问题。
- 2.2 使用 API 打开 采用 API 打开会让整个相机程序都封闭在自己的 APP 中完成,这里需要明确几个概念:Camera 类使用 API 之前需要创建 Camera 实例,然后通过 API 来初始化 Camera 进而拿到实时拍摄的画面SurfaceView用来渲染视频实时画面的 View采用 Intent 打开相机的方法非常简单,接下来我们全程使用 Camera API 来实现一下相机功能。
- 4. 小结 本节学习了一个手机上必不可少的设备,通过相机我们可以拍摄照片或者视频,Android 系统提供了两大打开方式:Intent 调用系统相机 Activitiy或者用 Camera API 自行实现拍照功能。第一种非常简单,将所有的相机操作都托管给系统,我们只关心最终用户拍摄的结果;而第二种就需要我们自己初始化 Camera 对象从而实现拍摄,在实际开发中如果你的功能是和拍摄强相关,需要一些定制化的拍摄体验,那么一定要使用第二种方式来自己实现 Camera,但是如果你只是一个简单的拍照获取图片,那么第一种会让你事半功倍。
- 2.1 使用 Intent 打开 通过使用 MediaStore 类提供的两个 Intnet 常量,可以直接将相机操作托管给 Android 系统而无需创建 Camera 实例:ACTION_IMAGE_CAPTURE:拍摄照片ACTION_VIDEO_CAPTURE:拍摄视频
- 相机:Camera 相机现在已经不仅仅是手机必备神器了,甚至相机的拍照质量已经是很多人买手机的首选条件了。而对于相机而言主要有两大功能:拍照片和拍视频。Android 为此两种方式:相机 intent相机 API本节我们就一起来看看相机的具体用法。
camera相关搜索
-
c 正则表达式
c string
c 编程
c 程序设计
c 程序设计教程
c 多线程编程
c 教程
c 数组
c 委托
c 下载
c 线程
c 语言
caidan
cakephp
call
calloc
calu
camera
caption
case语句