一、概述
本章节主要讲述的Android相机Camera的相关知识点,主要包含三个方面,Android启动系统相机生成缩略图、Android启动系统相机生成原图以及Android自定义相机等。

二、Android启动系统相机
核心代码:

package com.czhappy.camerademo.activity;import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;import com.czhappy.camerademo.R;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class MainActivity extends AppCompatActivity {private static int REQ_1 = 1;private static int REQ_2 = 2;private ImageView image_iv;private String mFilePath;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);image_iv = (ImageView) findViewById(R.id.image_iv);mFilePath = Environment.getExternalStorageDirectory().getPath();mFilePath = mFilePath +"/" + System.currentTimeMillis()+".jpg";}public void startCamera1(View view){//隐式Intent调用Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(it, REQ_1);}public void startCamera2(View view){//隐式Intent调用Intent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Uri photoUri = Uri.fromFile(new File(mFilePath));it.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);startActivityForResult(it, REQ_2);}public void customCamera(View view){Intent it = new Intent(MainActivity.this, CustomCameraActivity.class);startActivity(it);}/**** @param requestCode* @param resultCode* @param data //缩略图*/@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(resultCode == RESULT_OK){if(requestCode == REQ_1){//缩略图Bundle bundle = data.getExtras();Bitmap bmp = (Bitmap) bundle.get("data");image_iv.setImageBitmap(bmp);}else if(requestCode == REQ_2){//原图FileInputStream fis = null;try {fis = new FileInputStream(mFilePath);Bitmap bitmap = BitmapFactory.decodeStream(fis);image_iv.setImageBitmap(bitmap);} catch (FileNotFoundException e) {e.printStackTrace();}finally {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}}
}

三、Android自定义相机
1.自定义相机步骤:

  • 创建相机
  • 创建SurfaceView
  • 关联相机与SurfaceView
  • 调整相机显示效果
  • 自定义相机预览界面

2.核心代码:
自定义相机CustomCameraActivity.java

package com.czhappy.camerademo.activity;import android.content.Intent;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;import com.czhappy.camerademo.R;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;/*** Description:* User: chenzheng* Date: 2016/12/27 0027* Time: 13:43*/
public class CustomCameraActivity extends AppCompatActivity implements SurfaceHolder.Callback{private SurfaceView mPreview;private Camera mCamera;private SurfaceHolder mHolder;private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {File tempFile = new File("/sdcard/temp.png");try {FileOutputStream fos = new FileOutputStream(tempFile);fos.write(data);fos.close();Intent it = new Intent(CustomCameraActivity.this, CaptureResultActivity.class);it.putExtra("picPath", tempFile.getAbsolutePath());startActivity(it);finish();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_custom_camera);mPreview = (SurfaceView) this.findViewById(R.id.preview);mHolder = mPreview.getHolder();mHolder.addCallback(this);//点击自动对焦mPreview.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mCamera.autoFocus(null);;}});}/*** 拍照* @param view*/public void capture(View view){Camera.Parameters parameters = mCamera.getParameters();parameters.setPictureFormat(ImageFormat.JPEG);parameters.setPictureSize(800,400);parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//自动对焦mCamera.autoFocus(new Camera.AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {//对焦准确拍摄照片if(success){mCamera.takePicture(null, null, mPictureCallback);}}});}/*** 获取相机对象* @return*/private Camera getCamera(){mCamera = Camera.open();return mCamera;}/*** 开始预览相机内容*/private void setStartPreview(Camera camera, SurfaceHolder holder){try {camera.setPreviewDisplay(holder);camera.setDisplayOrientation(90);//设置相机预览为竖屏90度camera.startPreview();} catch (IOException e) {e.printStackTrace();}}/*** 释放相机资源*/private void releaseCamera(){if(mCamera!=null){mCamera.setPreviewCallback(null);mCamera.stopPreview();mCamera.release();mCamera = null;}}@Overrideprotected void onResume() {super.onResume();if (mCamera==null){mCamera = getCamera();if(mHolder!=null){setStartPreview(mCamera, mHolder);}}}@Overrideprotected void onPause() {super.onPause();releaseCamera();}@Overridepublic void surfaceCreated(SurfaceHolder holder) {setStartPreview(mCamera, mHolder);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {mCamera.stopPreview();setStartPreview(mCamera, mHolder);}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {releaseCamera();}
}

生成图片结果页面CaptureResultActivity.java

package com.czhappy.camerademo.activity;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;import com.czhappy.camerademo.R;import java.io.FileInputStream;
import java.io.FileNotFoundException;/*** Description:* User: chenzheng* Date: 2016/12/30 0030* Time: 13:27*/
public class CaptureResultActivity extends AppCompatActivity {private String picPath;private ImageView result_iv;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_capture_result);picPath = getIntent().getStringExtra("picPath");result_iv = (ImageView) findViewById(R.id.result_iv);try {FileInputStream fis = new FileInputStream(picPath);Bitmap bitmap = BitmapFactory.decodeStream(fis);Matrix matrix = new Matrix();matrix.setRotate(90);//旋转90度矩阵bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);result_iv.setImageBitmap(bitmap);} catch (FileNotFoundException e) {e.printStackTrace();}}
}

四、项目源代码下载

http://download.csdn.net/detail/chenzheng8975/9725645

Android相机Camera基础相关推荐

  1. android camera 显示过程,Android相机Camera基础知识

    一.概述本章节主要讲述的Android相机Camera的相关知识点,主要包含三个方面,Android启动系统相机生成缩略图.Android启动系统相机生成原图以及Android自定义相机等. 二.An ...

  2. android获取carema所有参数,android相机Camera.Parameters所有的参数值

    最近两天一直在看android相机的参数设置,Camera.Parameters中属性值非常的多,我索性就把就调用的flatten()方法,将设置的参数值都打印出来了,方便以后查看,如果想要修改那个属 ...

  3. android 自定义相机,Android自定义相机Camera基础

    创建自定义相机界面调用Camera来实现拍照功能.如左图:上方是一个CAPTURE按钮,下方是用来实时显示摄像头预览画面的SurfaceView,通过点击CAPTURE按钮进行拍照,并将拍摄的图片显示 ...

  4. android平台下OpenGL ES 3.0使用GLSurfaceView对相机Camera预览实时处理

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  5. Android之 Camera相机使用

    一 简介 1.1 随着信息时代的发展,相机在我们生活中使用越来越频繁,也成为手机的基本配置之一.相机可以用来拍照,拍视频,人脸识别,视频聊天,扫码支付,监控等常见领域 不管什么场景,基本原理都差不多, ...

  6. Android最新相机(Camera)拍照、拍视频全面总结

    介绍 利用系统相机 调用系统相机拍照 获取小图标 获取全尺寸图片 添加到相册 系统相机拍视频 自定义相机 自定义相机拍照 监测设备是否有相机可使用 利用SurfaceView创建拍照时预览界面 拍照并 ...

  7. Android studio设置相机权限,如何强制将“android.permission.CAMERA”权限添加到Codename中的清单中...

    我试图在Codename One中显示后置摄像头的实时预览.我使用原生界面(我首先针对的是Android). 为了让我的应用程序能够使用相机而不会弄乱构建提示,我在主窗体中添加了以下行: if (Ca ...

  8. CAMERA(12)---[Android相机]光线传感器识别环境光亮强度

    [Android相机]光线传感器识别环境光亮强度 关于Android相机的开发流程可以看前一篇文章, [Android 相机]Android 相机开发的基本流程 https://blog.csdn.n ...

  9. camera (19)---Android 相机开发的基本流程

    [Android 相机]Android 相机开发的基本流程 https://blog.csdn.net/bluewindtalker/article/details/54563910 相机开发现在有2 ...

最新文章

  1. php实现多商家开发,Thinkphp5.0实战-仿百度糯米开发多商家电商平台学习注意事项...
  2. 程序员幽默:当代程序员的主要矛盾是什么?
  3. mysql innodb事务中_MySQL InnoDB如何保证事务特性示例详解
  4. Linux多进程拷贝文件
  5. oracle 根据用户备份,Oracle基于用户的备份及恢复
  6. HandleExternalEventActivity
  7. 李国庆俞渝撕破脸,当当喊话:冲动是魔鬼 冷静下来吧
  8. 盘点那些让人上火的提问方式(论如何让交流更高效)
  9. 三星中文AI助手Bixby发布,现在,这是“一家AI商用技术公司”
  10. 新冠感染池检测选取最优池检测人数(概率模型理论公式+蒙特卡洛matlab仿真)
  11. Wondershare Recoverit for Mac(数据恢复套件)
  12. Redis设计与实现笔记 |目录
  13. TR069 (CWMP协议即CPE广域网管理协议)
  14. 产品经理如何进行用户需求分析?
  15. Go语言核心之美 2.5-字符串
  16. d盘无法格式化怎么解决
  17. PHP MySQL 连接数据库
  18. 【Unity】入门学习笔记180605——游戏动画设计(4)——游戏角色动画基础
  19. 考研复试计算机网络篇
  20. 如何使用微信公众号做营销

热门文章

  1. 详解alpha-beta算法
  2. 正则表达式中的特殊字符
  3. VF01/VF02/VF03销售发票屏幕增强实例
  4. Linux:进程和计划任务管理
  5. 软件架构:总体设计师
  6. 如何找出阻止windows睡眠的原因或软件
  7. 电子计算机音乐 faded,Faded在线试听_Alan Walker_高音质歌曲_九酷音乐
  8. 场景理解的统一感知分析ECCV2018
  9. Unity中Canvas的Render Mode的三种模式介绍
  10. 阿里云落地北美 誓与亚马逊一争高下?