android实现相机功能,Android开发实现拍照功能的方法实例解析
本文实例讲述了Android开发实现拍照功能的方法。分享给大家供大家参考,具体如下:
解析:
1)判断是否有摄像头checkCameraHardware(this)
2)获得相机camera = Camera.open(0);
3)把相机添加到mPreView = new SurfacePreView(this, mCamera);
4)实现拍照 mCamera.autoFocus
5)在拍照后使用mCamera.takePicture(null, null, mPicture);方法把图片保存到sdcard
代码实现:
/**
* 使用照相机拍照
* @author chen.lin
*
*/
public class CameraActivity extends Activity {
private Camera mCamera;//相机
private SurfacePreView mPreView;//视图
private FrameLayout mFrameLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera_takephoto);
mFrameLayout = (FrameLayout) findViewById(R.id.framelayout);
if (checkCameraHardware(this)) {
mCamera = getCamera();
mPreView = new SurfacePreView(this, mCamera);
mFrameLayout.addView(mPreView);
}
}
/**
* 拍照对焦
* @param view
*/
public void takephoto(View view){
mCamera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
mCamera.takePicture(null, null, mPicture);
}
});
}
/**
* 拍照后的图片保存
*/
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
try {
File file = new File("/sdcard/file/aa.jpg");
if (!file.exists()) {
file.mkdirs();
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
/**
* 判断照相机是否存在
* @param context
* @return
*/
private boolean checkCameraHardware(Context context){
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
return true;
}
return false;
}
/**
* 初始化照相机
* @return
*/
public static Camera getCamera(){
Camera camera = null;
try {
camera = Camera.open(0);
} catch (Exception e) {
e.printStackTrace();
}
return camera;
}
/**
* 实现拍照视图
*/
@SuppressWarnings("deprecation")
private class SurfacePreView extends SurfaceView implements SurfaceHolder.Callback{
private Camera mCamera;
private SurfaceHolder mHolder;
public SurfacePreView(Context context, Camera camera) {
super(context);
mCamera = camera;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (holder.getSurface() == null) {
return;
}
try {
mCamera.stopPreview();
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//
mCamera = null;
}
}
}
布局:
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:id="@+id/framelayout"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" >
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="takephoto"
android:text="拍照" />
希望本文所述对大家Android程序设计有所帮助。
android实现相机功能,Android开发实现拍照功能的方法实例解析相关推荐
- Android添加拍照功能,Android开发实现拍照功能的方法实例解析
本文实例讲述了Android开发实现拍照功能的方法.分享给大家供大家参考,具体如下: 解析: 1)判断是否有摄像头checkCameraHardware(this) 2)获得相机camera = Ca ...
- Android开发 Camera2开发_1_拍照功能开发
Android开发 Camera2开发_1_拍照功能开发 介绍 google已经在Android5.1之后取消了对Camera1的更新,转而提供了功能更加强大的Camera2.虽然新版本依然可以使用C ...
- Android开发之拍照功能实现
参考链接:http://www.linuxidc.com/Linux/2013-11/92892p3.htm 原文链接:http://blog.csdn.net/tangcheng_ok/articl ...
- Android开发之拍照功能实现(附源码)
大家好,这是一个简单的拍照功能,很简单的界面,一个显示图像区域SurfaceView一个"拍照"按钮.直接上代码! 1.CameraDemoActivity.java(主界面) p ...
- android异常相机处理,android 调用系统相机拍照的各种异常处理
1 本文只讨论调用系统相机出现的异常解决办法下面是调用系统相机的代码 先看一下最简单的写法 Intent intent = new Intent(android.provider.MediaStore ...
- Android自定义相机,切换前后摄像头,照相机拍照
Android自定义相机,简单实现切换前后摄像头,照相机拍照 Ctrl +C Ctrl+V 可以直接 run 起来,注释比较详细;源码下载 <?xml version="1.0&qu ...
- android自定义相机添加蒙板,拍照剪切
前几天,我写了一篇自定义相机加取景框的文章,这几天,我又研究了一下,进一步写了蒙板,并且拍照出来剪切只留取景框的照片. 加上对之前代码的调整.现在又记录下来 现在的效果是这样的 布局文件 <?x ...
- android版本相机权限,Android 11系统权限收紧,第三方APP仅支持调用原生相机
Android 和 iOS 本质上的区别在于系统的开源程度,与 iOS 的封闭不同,Android 系统一直都保持着比较开放的环境,给开发者带来了便捷的开发体验,而这也是 Android 系统最大的优 ...
- android调用相机分辨率,Android菜鸟笔记-获取摄像头像素值
前言: 获取摄像头的像素值,通过获取相机设置中支持拍照的最大宽度和最大高度就可算到摄像头的像素值了,当然跟手机厂商标称的还是有差别的.比如标称200W的通过计算1200*1600=1920000=19 ...
最新文章
- Java学习笔记(二一)——Java 泛型
- 捕捉mysql中不可忽视的知识点(二)
- Webpack构建library时的踩坑经历
- JavaWeb开发模式:C/S模式,B/S模式,JSP+JavaBean模式,JSP+Servlet+JavaBean模式
- OpenCV中findContours函数的使用
- JHipster入门,第2部分
- unity消息队列判断字符串相等有错误_Python3十大经典错误及解决办法
- Ansible安装及配置
- 根据大小分割大文本_值得一看的文本检测方法
- Burpsuite工具使用
- Java中的泛型全解析(二)
- 关于返回二维数组排序后序号数组的问题求解
- 免费试用CRM的高效方式
- C题:无线充电电动小车(本科)--2018年TI杯大学生电子设计竞赛
- 计算机里的音乐怎么设置,声音和音频设备在电脑上如何设置 电脑无声的情况如何解决【详解】...
- 利用 LotusScript 实现 Microsoft Word 文档在公文流转中的公文留痕
- 计算机的声卡怎么安装教程,图文详解如何安装声卡驱动_给电脑安装声卡驱动的详细教程...
- Windows Server 2008 R2 自定义桌面 图标
- html5多媒体事件写法,多媒体元素重要事件 -HTML5
- 【UE4】蓝图转为C++官方教程部分笔记