Android如何实现控制摄像头拍照
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍Android如何实现控制摄像头拍照,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用Camera控制手机拍照的步骤如下:1) 调用Camera的open()方
千家信息网最后更新 2026年11月02日Android如何实现控制摄像头拍照
这篇文章主要介绍Android如何实现控制摄像头拍照,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
使用Camera控制手机拍照的步骤如下:
1) 调用Camera的open()方法打开相机。该方法默认打开后置摄像头。如果需要打开指定摄像头,可以为该方法传入摄像头ID。
2) 调用Camera的getParameters()方法获取拍照参数。该方法返回一个 Camera.Parameters 对象。
3) 调用Camera.Parameters对象方法设置拍照参数。
4) 调用Camera的startPreview()方法开始预览取景,在预览取景之前需要调用Camera 的 setPreviewDisplay(SurfaceHolder holder)方法设置使用哪个Surface View 来显示取景照片。
5) 调用Camera的takePicture()方法进行拍照。
6) 结束程序时,调用Camera的stopPreview()结束取景预览,并调用release()方法释放资源。
应用实例:拍照时自动对焦
下面的实例示范了使用Camera来进行拍照、当用户按下拍照键时,该应用会自动对焦,当对焦成功时拍下照片。该程序的界面中只提供了一个SurfaceView来显示预览取景,十分简单。该程序代码如下:
package com.jph.camera; import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.BitmapFactory;import android.graphics.ImageFormat;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.hardware.Camera.ShutterCallback;import android.os.Bundle;import android.os.Environment;import android.util.DisplayMetrics;import android.view.Display;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.EditText;import android.widget.ImageView;import android.widget.Toast;/** * 控制手机拍照 * @author jph * Date:2014.08.20 * */public class CaptureImage extends Activity{ SurfaceView sView; SurfaceHolder surfaceHolder; int screenWidth, screenHeight; // 定义系统所用的照相机 Camera camera; // 是否在预览中 boolean isPreview = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置全屏 requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); // 获取窗口管理器 WindowManager wm = getWindowManager(); Display display = wm.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); // 获取屏幕的宽和高 display.getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels; // 获取界面中SurfaceView组件 sView = (SurfaceView) findViewById(R.id.sView); // 获得SurfaceView的SurfaceHolder surfaceHolder = sView.getHolder(); // 为surfaceHolder添加一个回调监听器 surfaceHolder.addCallback(new Callback() { @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { // 打开摄像头 initCamera(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 如果camera不为null ,释放摄像头 if (camera != null) { if (isPreview) camera.stopPreview(); camera.release(); camera = null; } } }); } private void initCamera() { if (!isPreview) { // 此处默认打开后置摄像头。 // 通过传入参数可以打开前置摄像头 camera = Camera.open(0); //① camera.setDisplayOrientation(90); } if (camera != null && !isPreview) { try { Camera.Parameters parameters = camera.getParameters(); // 设置预览照片的大小 parameters.setPreviewSize(screenWidth, screenHeight); // 设置预览照片时每秒显示多少帧的最小值和最大值 parameters.setPreviewFpsRange(4, 10); // 设置图片格式 parameters.setPictureFormat(ImageFormat.JPEG); // 设置JPG照片的质量 parameters.set("jpeg-quality", 85); // 设置照片的大小 parameters.setPictureSize(screenWidth, screenHeight); // 通过SurfaceView显示取景画面 camera.setPreviewDisplay(surfaceHolder); //② // 开始预览 camera.startPreview(); //③ } catch (Exception e) { e.printStackTrace(); } isPreview = true; } } /** * 此方法在布局文件中调用 * */ public void capture(View source) { if (camera != null) { // 控制摄像头自动对焦后才拍照 camera.autoFocus(autoFocusCallback); //④ } } AutoFocusCallback autoFocusCallback = new AutoFocusCallback() { // 当自动对焦时激发该方法 @Override public void onAutoFocus(boolean success, Camera camera) { if (success) { // takePicture()方法需要传入3个监听器参数 // 第1个监听器:当用户按下快门时激发该监听器 // 第2个监听器:当相机获取原始照片时激发该监听器 // 第3个监听器:当相机获取JPG照片时激发该监听器 camera.takePicture(new ShutterCallback() { public void onShutter() { // 按下快门瞬间会执行此处代码 } }, new PictureCallback() { public void onPictureTaken(byte[] data, Camera c) { // 此处代码可以决定是否需要保存原始照片信息 } }, myJpegCallback); //⑤ } } }; PictureCallback myJpegCallback = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 根据拍照所得的数据创建位图 final Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); String fileName=getFileNmae(); if (fileName==null) return; // 创建一个位于SD卡上的文件 File file = new File(fileName); FileOutputStream outStream = null; try { // 打开指定文件对应的输出流 outStream = new FileOutputStream(file); // 把位图输出到指定文件中 bm.compress(CompressFormat.JPEG, 100, outStream); outStream.close(); Toast.makeText(CaptureImage.this, "照片以保存到"+fileName, Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } // 重新浏览 camera.stopPreview(); camera.startPreview(); isPreview = true; } }; /** * 返回摄取照片的文件名 * @return 文件名 * */ protected String getFileNmae() { // TODO Auto-generated method stub String fileName; if (!Environment.getExternalStorageState().equals (Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "监测到你的手机没有插入SD卡,请插入SD卡后再试", Toast.LENGTH_LONG).show(); return null; } SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH.mm.ss", Locale.getDefault()); fileName=Environment.getExternalStorageDirectory()+File.separator +sdf.format(new Date())+".JPG"; return fileName; }}程序运行效果图:

以上是"Android如何实现控制摄像头拍照"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
方法
照片
摄像头
摄像
监听器
监听
文件
控制
参数
程序
代码
手机
相机
原始
位图
内容
大小
实例
对象
快门
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中关村互联网 科技集团
奇酷互联网科技公司
广州宏创互联网科技
汇久创客互联网科技
广州凡科互联网科技
联恩商钥互联网科技有限公司
互联网和高科技公司
隆华科技工业互联网
互联网经济与金融科技
苏州铭阳互联网科技有限公司
河南住房之家互联网科技
无锡工业互联网科技有限公司
互联网科技圈年度人物
广东工业互联网大赛深圳学泰科技
西安有哪些互联网高科技企业
抖集互联网科技技术咨询
科技互联网行业投资研究
互联网时代科技型公司的机会
张家口科技产业互联网平台
互联网金融金融科技
苏州找大状互联网科技有限公司
青岛互联网科技公司
蓝色互联网科技
杭州壁岐互联网科技有限公司
燊美集互联网科技有限公司
工业互联网科技成果转化
信承诺互联网科技有限公司
广州三三互联网科技有限公司
众联互联网络科技
互联网科技大佬云集