Android多媒体应用开发-控制摄像头拍照
现在的手机的功能可谓是五花八门,手机照相功能就是特别突出的一点,现在的手机照相机甚至成了专业数码照相机,可以拍摄出清晰的照片和录制高分辨率的视频。Android操作系统呢,提供了相应的功能来控制拍照:
通过Camera进行拍照
1.调用Camera的open()方法打开相机。
2.调用Camera的setParameters()方法获取拍照参数。该方法返回一个Camera.Parameters对象。
3.调用Camera.Paramers对象方法设置拍照参数
4.调用Camera的startPreview()方法开始预览取景,在预览取景之前需要调用Camera的setPreViewDisplay(SurfaceHolder holder)方法设置使用哪个SurfaceView来显示取景图片。
5.调用Camera的takePicture()方法进行拍照.
6.结束程序时,调用Camera的StopPriview()结束取景预览,并调用release()方法释放资源.
创建项目:CaptureImage
运行效果:
程序代码:
==>CaptureImage.java
- package org.wwj.sound;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.DialogInterface.OnClickListener;
- import android.graphics.Bitmap;
- import android.graphics.Bitmap.CompressFormat;
- import android.graphics.BitmapFactory;
- import android.graphics.PixelFormat;
- import android.hardware.Camera;
- import android.hardware.Camera.PictureCallback;
- import android.os.Bundle;
- import android.os.Environment;
- import android.view.Display;
- import android.view.KeyEvent;
- 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;
- 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 = (WindowManager) getSystemService(
- Context.WINDOW_SERVICE);
- Display display = wm.getDefaultDisplay();
- // 获取屏幕的宽和高
- screenWidth = display.getWidth();
- screenHeight = display.getHeight();
- // 获取界面中SurfaceView组件
- sView = (SurfaceView) findViewById(R.id.sView);
- // 获得SurfaceView的SurfaceHolder
- surfaceHolder = sView.getHolder();
- // 为surfaceHolder添加一个回调监听器
- surfaceHolder.addCallback(new Callback()
- {
- public void surfaceChanged(SurfaceHolder holder, int format, int width,
- int height)
- {
- }
- public void surfaceCreated(SurfaceHolder holder)
- {
- // 打开摄像头
- initCamera();
- }
- public void surfaceDestroyed(SurfaceHolder holder)
- {
- // 如果camera不为null ,释放摄像头
- if (camera != null)
- {
- if (isPreview)
- camera.stopPreview();
- camera.release();
- camera = null;
- }
- }
- });
- // 设置该SurfaceView自己不维护缓冲
- surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- }
- private void initCamera()
- {
- if (!isPreview)
- {
- camera = Camera.open();
- }
- if (camera != null && !isPreview)
- {
- try
- {
- Camera.Parameters parameters = camera.getParameters();
- // 设置预览照片的大小
- parameters.setPreviewSize(screenWidth, screenHeight);
- // 每秒显示4帧
- parameters.setPreviewFrameRate(4);
- // 设置图片格式
- parameters.setPictureFormat(PixelFormat.JPEG);
- // 设置JPG照片的质量
- parameters.set("jpeg-quality", 85);
- //设置照片的大小
- parameters.setPictureSize(screenWidth, screenHeight);
- camera.setParameters(parameters);
- //通过SurfaceView显示取景画面
- camera.setPreviewDisplay(surfaceHolder);
- // 开始预览
- camera.startPreview();
- // 自动对焦
- camera.autoFocus(null);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- isPreview = true;
- }
- }
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event)
- {
- switch (keyCode)
- {
- // 当用户单击照相键、中央键时执行拍照
- case KeyEvent.KEYCODE_DPAD_CENTER:
- case KeyEvent.KEYCODE_CAMERA:
- if (camera != null && event.getRepeatCount() == 0)
- {
- // 拍照
- camera.takePicture(null, null , myjpegCallback);
- return true;
- }
- break;
- }
- return super.onKeyDown(keyCode, event);
- }
- PictureCallback myjpegCallback = new PictureCallback()
- {
- public void onPictureTaken(byte[] data, Camera camera)
- {
- // 根据拍照所得的数据创建位图
- final Bitmap bm = BitmapFactory.decodeByteArray(data
- , 0, data.length);
- // 加载/layout/save.xml文件对应的布局资源
- View saveDialog = getLayoutInflater().inflate(
- R.layout.save, null);
- final EditText photoName = (EditText) saveDialog
- .findViewById(R.id.photo_name);
- // 获取saveDialog对话框上的ImageView组件
- ImageView show = (ImageView) saveDialog.findViewById(R.id.show);
- // 显示刚刚拍得的照片
- show.setImageBitmap(bm);
- //使用对话框显示saveDialog组件
- new AlertDialog.Builder(CaptureImage.this)
- .setView(saveDialog)
- .setPositiveButton("保存", new OnClickListener()
- {
- public void onClick(DialogInterface dialog,
- int which)
- {
- // 创建一个位于SD卡上的文件
- File file = new File(Environment.getExternalStorageDirectory()
- , photoName.getText().toString() + ".jpg");
- FileOutputStream outStream = null;
- try
- {
- // 打开指定文件对应的输出流
- outStream = new FileOutputStream(file);
- // 把位图输出到指定文件中
- bm.compress(CompressFormat.JPEG, 100, outStream);
- outStream.close();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- })
- .setNegativeButton("取消", null)
- .show();
- //重新浏览
- camera.stopPreview();
- camera.startPreview();
- isPreview = true;
- }
- };
- }
设置权限:
- <!-- 授予程序使用摄像头的权限 -->
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-feature android:name="android.hardware.camera" />
- <uses-feature android:name="android.hardware.camera.autofocus" />
转载于:https://www.cnblogs.com/Free-Thinker/p/3546760.html
Android多媒体应用开发-控制摄像头拍照相关推荐
- 多媒体应用开发-控制摄像头拍照
摄像头拍照 文章目录 摄像头拍照 1.Camera1使用 1.1 使用步骤: 1.2 为什么要使用Camera2 1.3 Camera2的 5点新特性: 1.4 Camera2架构概述 1.5 Cam ...
- linux摄像头拍照程序,Android开发:Camera初探——控制摄像头拍照
实习接触的项目中需要调用系统摄像头进行拍照,通过完成这个功能点暂时初步了解了Android中的Camera,当然目前只是停留在使用阶段,对于Camera的深度剖析有机会也要了解一下. 通过Camera ...
- 《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》——2.3节简析Android安装文件...
本节书摘来自异步社区<Android多媒体应用开发实战详解:图像.音频.视频.2D和3D>一书中的第2章,第2.3节简析Android安装文件,作者 王石磊 , 吴峥,更多章节内容可以访问 ...
- 控制摄像头拍照(一)
现在的手机一般都会提供相机功能,有些相机的镜头甚至支持1000万以上像素,有些甚至支持光学变焦,这些手机已经变成了专业数码相机.为了充分利用手机上的相机功能,Android应用可以控制拍照和录制视频. ...
- chatgpt赋能Python-python3控制摄像头拍照
Python3 控制摄像头拍照 介绍 Python3 是一种高级编程语言,被广泛应用于机器学习.人工智能.Web 开发等领域.控制摄像头拍照是 Python3 中非常常见的需求,例如监控.照片拍摄等等 ...
- python实现摄像头拍照_使用Python控制摄像头拍照并发邮件
o1 前言 为什么会有写这个程序的想法呢? 最初的想法是写一个可以用电脑前置摄像头拍照的程序,在舍友使用你电脑的时候,不经意间获取到一大堆奇葩舍友的表情包. 然后我又突发奇想,要不搞个开机启动吧,这样 ...
- python控制摄像头拍照_python+opencv+pyqt5控制摄像头在Qlabel上显示
import cv2 import numpy as numpy from PIL import * import sys from PyQt5.QtWidgets import * from PyQ ...
- 《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》——1.3节搭建Android应用开发环境...
本节书摘来自异步社区<Android多媒体应用开发实战详解:图像.音频.视频.2D和3D>一书中的第1章,第1.3节搭建Android应用开发环境,作者 王石磊 , 吴峥,更多章节内容可以 ...
- 《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》——2.1节简析Android安装文件...
本节书摘来自异步社区<Android多媒体应用开发实战详解:图像.音频.视频.2D和3D>一书中的第2章,第2.1节简析Android安装文件,作者 王石磊 , 吴峥,更多章节内容可以访问 ...
最新文章
- 推荐 33 个 IDEA 最牛配置,写代码太爽了!
- 仿照jquery的方式实现的tabs和focus
- AtCoder AGC002E Candy Piles (博弈论)
- 高校老师暑假狂补AI课背后:AI人才培养竞赛开跑
- python3.7 6如何安装-Python 3.7.1在CentOS 6.10 安装部署
- java面试题十九 判断题
- 能源36号文解读_IDC报告预测:今年中国新能源汽车销量将达116万辆,未来五年复合增长率36%_详细解读_最新资讯_热点事件...
- 【数字逻辑设计】判断二进制加法溢出的电路设计
- 杂志大片既视感护肤美妆海报,psd分层模板
- 1269: [AHOI2006]文本编辑器editor
- mysql 字段存文件_使用数据库(mysql)字段保存文件
- Java排序之归并排序
- 星际2 BETA客户端背景音乐打包下载(附提取方法)
- Filenet:主打底层技术创新,检索分发挖矿开创全民挖矿时代!
- T-SQL 基础简介
- 双路cpu比单路强多少_关于CPU单核单路/双路和双核双路的区别
- 计算机通信机房消防要求,消防专用电话的设置场所及设计要求
- 1320. 拯救奶牛
- 【VBS发邮件】乱码解决方法
- 优惠券测试点和测试用例