Android中调用摄像头并实现对焦拍照
来源:互联网 发布:java怎么发音 编辑:程序博客网 时间:2024/05/16 01:42
不废话,直接上代码
package com.kelly.takepicture;import java.io.File;import java.io.FileOutputStream;import java.util.Date;import android.annotation.SuppressLint;import android.app.Activity;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.os.AsyncTask;import android.os.Build;import android.os.Bundle;import android.os.Environment;import android.text.format.DateFormat;import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.view.WindowManager;public class MainActivity extends Activity {private View butlayout;private SurfaceView surfaceView;private Camera camera;private File jpgFile;private Camera.Parameters parameters;private static final String TAG = "MainActivity";@Overrideprotected 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.activity_main);surfaceView = (SurfaceView) findViewById(R.id.surfaceview);surfaceView.getHolder().setSizeFromLayout();surfaceView.getHolder().setKeepScreenOn(true);surfaceView.getHolder().addCallback(new SurfaceCallback());butlayout = findViewById(R.id.buttonlayout);}// 点击屏幕时,对焦和拍照按钮 出现public boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {butlayout.setVisibility(ViewGroup.VISIBLE);return true;}return super.onTouchEvent(event);}private class SurfaceCallback implements Callback {@SuppressLint("InlinedApi")public void surfaceCreated(SurfaceHolder holder) {if (camera == null) {camera = Camera.open();// 打开摄像头try {camera.setPreviewDisplay(holder);initCamera();camera.startPreview();// camera.setDisplayOrientation(90);// parameters.set("rotation", 90);} catch (Exception e) {e.printStackTrace();}}}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// 实现自动对焦camera.autoFocus(new AutoFocusCallback() {public void onAutoFocus(boolean success, Camera camera) {if (success) {initCamera();// 实现相机的参数初始化camera.cancelAutoFocus();// 只有加上了这一句,才会自动对焦。}}});}public void surfaceDestroyed(SurfaceHolder holder) {if (camera != null) {camera.stopPreview();camera.release();camera = null;}}}public void takepicture(View view) {switch (view.getId()) {// 拍照case R.id.but_takepic:camera.takePicture(null, null, new MyPictureCallback());break;case R.id.but_autofocus:// 对焦camera.autoFocus(null);break;default:break;}}private class MyPictureCallback implements PictureCallback {public void onPictureTaken(byte[] data, Camera camera) {// 保存 图片new SavePictureTask().execute(data);camera.startPreview();}}/** * 使用异步任务 进行文件操作 * * @author Administrator * */class SavePictureTask extends AsyncTask<byte[], String, String> {protected String doInBackground(byte[]... params) {String fname = DateFormat.format("yyyyMMddhhmmss", new Date()).toString() + ".jpg";jpgFile = new File(Environment.getExternalStorageDirectory() + "/"+ fname);try {FileOutputStream fos = new FileOutputStream(jpgFile.getPath());fos.write(params[0]);fos.close();} catch (Exception e) {e.printStackTrace();}return null;}}// 相机参数的初始化设置@SuppressLint("InlinedApi")private void initCamera() {parameters = camera.getParameters();Log.i(TAG, parameters.flatten());parameters.setJpegThumbnailQuality(100);// 设置质量// parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);//闪光灯parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);// 1连续对焦// 下面两句调整照片质量,只针对小米2S,不同手机,参数不同// parameters.setPreviewSize(1920, 1088);// parameters.setPictureSize(4208, 3120);setDispaly(parameters, camera);camera.setParameters(parameters);camera.startPreview();camera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上}// 控制图像的正确显示方向@SuppressWarnings("deprecation")private void setDispaly(Camera.Parameters parameters, Camera camera) {if (Integer.parseInt(Build.VERSION.SDK) >= 8) {camera.setDisplayOrientation(90);} else {parameters.setRotation(90);}}}源码下载:点击打开链接
参考:http://blog.csdn.net/geekstart/article/details/13630009
0 0
- Android中调用摄像头并实现对焦拍照
- Android NDK——TextureView的应用之调用外接USB摄像头自动对焦并完成隐蔽拍照
- Android进阶——多线程间的通信之调用系统标准摄像头自动对焦并自动完成隐蔽拍照
- Android应用中调用手机摄像头拍照并保存
- Android——调用摄像头并自动对焦拍…
- jmf实现调用笔记本摄像头并拍照
- android实现自动对焦拍照
- android调用摄像头拍照并显示
- Android 调用摄像头拍照并裁剪
- 实现asp程序调用摄像头并控制摄像头进行拍照
- 【Android】自定义相机的实现(支持连续拍照、前后摄像头切换、连续对焦)
- android 调用摄像头拍照
- Android 调用摄像头拍照
- Android 调用摄像头拍照
- android: 调用摄像头拍照
- 调用摄像头拍照并显示
- Html调用摄像头并拍照
- android调用摄像头拍照,从相册中选择照片并裁剪
- android按钮被点击文字颜色变化效果
- 设有n个人依围成一圈,从第1个人开始报数,数到第m个人出 列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所 有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺
- poj 1328 Radar Installation 【贪心】【区间选点问题】
- Django 1.6 基于类的通用视图
- list
- Android中调用摄像头并实现对焦拍照
- poj 2236 Wireless Network 【并查集】
- vim 全选和复制
- 二叉排序树
- hdu4771 Stealing Harry Potter's Precious 2013 Asia Hangzhou Regional Contest
- cc150:使用一个数组实现3个栈
- 仿iPhone的AssistiveTouch 悬浮辅助球工具
- “用最有效率的方法算出2乘以8等於几?”
- 关于职场的思考