转老戴自动对焦camera view
来源:互联网 发布:淘宝cos店推荐 编辑:程序博客网 时间:2024/04/29 17:48
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.lang.reflect.Method;
- import java.util.Date;
- import android.content.Context;
- import android.content.pm.ActivityInfo;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.hardware.Camera;
- import android.media.MediaPlayer;
- import android.os.Build;
- import android.util.AttributeSet;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
- Camera.AutoFocusCallback, Camera.PictureCallback {
- private TakePictureListener mListener;
- /**
- * This is a holder that holding a display surface.
- */
- private SurfaceHolder mHolder = null;
- private int sdk = 3;
- /**
- * This is a camera object using for connect/disconnect with the camera
- * service,and so on.
- */
- private Camera mCamera;
- /**
- * Perform inflation from XML and apply a class-specific base style. This
- * constructor of View allows subclasses to use their own base style when
- * they are inflating.
- *
- * @param context
- * The Context the view is running in, through which it can
- * access the current theme, resources, etc.
- * @param attrs
- * The attributes of the XML tag that is inflating the view.
- * @param defStyle
- * The default style to apply to this view. If 0, no style will
- * be applied (beyond what is included in the theme). This may
- * either be an attribute resource, whose value will be retrieved
- * from the current theme, or an explicit style resource.
- */
- public CameraView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- init();
- }
- /**
- * Constructor that is called when inflating a view from XML. This is called
- * when a view is being constructed from an XML file, supplying attributes
- * that were specified in the XML file. This version uses a default style of
- * 0, so the only attribute values applied are those in the Context's Theme
- * and the given AttributeSet.
- *
- * @param context
- * The Context the view is running in, through which it can
- * access the current theme, resources, etc.
- * @param attrs
- * The attributes of the XML tag that is inflating the view.
- */
- public CameraView(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
- }
- /**
- * Simple constructor to use when creating a view from code.
- *
- * @param context
- * The Context the view is running in, through which it can
- * access the current theme, resources, etc.
- */
- public CameraView(Context context) {
- super(context);
- init();
- }
- public void init() {
- if (mHolder == null) {
- mHolder = getHolder();
- mHolder.addCallback(this);
- mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- sdk = getSDKInt();
- }
- }
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width,
- int height) {
- try {
- // rotate camera 90 degree on portrait mode
- if (getContext().getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
- if (sdk <= 4) {
- // 1.5 & 1.6
- Camera.Parameters parameters = mCamera.getParameters();
- parameters.set("orientation", "portrait");
- mCamera.setParameters(parameters);
- } else {
- setDisplayOrientation(mCamera, 90);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- startPreview();
- }
- /**
- * rotate camera with any degree, only available for SDK 5 and later
- *
- * @param camera
- * @param angle
- */
- private void setDisplayOrientation(Camera camera, int angle) {
- Method downPolymorphic;
- if (sdk <= 4)
- return;
- try {
- if (sdk > 4 && sdk < 8) {
- // parameters for pictures created by a Camera service.
- Camera.Parameters parameters = mCamera.getParameters();
- // 2.0, 2.1
- downPolymorphic = parameters.getClass().getMethod(
- "setRotation", new Class[] { int.class });
- if (downPolymorphic != null)
- downPolymorphic.invoke(parameters, new Object[] { angle });
- // Sets the Parameters for pictures from this Camera
- // service.
- mCamera.setParameters(parameters);
- } else {
- downPolymorphic = camera.getClass().getMethod(
- "setDisplayOrientation", new Class[] { int.class });
- if (downPolymorphic != null)
- downPolymorphic.invoke(camera, new Object[] { angle });
- }
- } catch (Exception e) {
- }
- }
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- // get Camera object.
- try {
- mCamera = Camera.open();
- mCamera.setPreviewDisplay(holder);
- } catch (RuntimeException e) {
- e.printStackTrace();
- releaseCamera();
- } catch (IOException e) {
- e.printStackTrace();
- releaseCamera();
- }
- }
- public void stopPreview() {
- releaseCamera();
- }
- public void startPreview() {
- if (mCamera != null) {
- mCamera.startPreview();
- mCamera.autoFocus(this);
- }
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- releaseCamera();
- }
- private void releaseCamera() {
- if (mCamera != null) {
- mCamera.stopPreview();
- mCamera.release();
- }
- mCamera = null;
- System.gc();
- }
- private int getSDKInt() {
- // this is safe so that we don't need to use SDKInt which is only
- // available after 1.6
- try {
- return Integer.parseInt(Build.VERSION.SDK);
- } catch (Exception e) {
- return 3; // default to target 1.5 cupcake
- }
- }
- @Override
- public void onAutoFocus(boolean success, Camera camera) {
- if (success)
- mCamera.takePicture(null, null, this);
- }
- @Override
- public void onPictureTaken(byte[] data, Camera camera) {
- if (mListener != null) {
- Bitmap cameraBitmap = BitmapFactory.decodeByteArray(data, 0,
- data.length);
- } catch (Exception e) {
- e.printStackTrace();
- }
- mListener.onTakePicture(cameraBitmap);
- }
- startPreview();
- }
- public void setTakePictureListener(TakePictureListener listener) {
- mListener = listener;
- }
- public interface TakePictureListener {
- public void onTakePicture(Bitmap bitmap);
- }
- }
- 转老戴自动对焦camera view
- Camera自动对焦
- android camera 根据加速器的变化实现自动对焦
- Android 系统中camera中 自动对焦的解决方案
- [Android编程心得] Camera(OpenCV)自动对焦和触摸对焦的实现
- 自动对焦
- 自动对焦
- android源码开发之Camera添加自动对焦ListPreference,camera,key
- 利用Camera与Surface结合的一个自动对焦拍照Demo
- Camera中对焦模式总结
- 自动对焦算法
- 摄像头的自动对焦
- 相机自动对焦原理
- 摄像头自动对焦
- 自动对焦的原理
- AR 摄像机自动对焦
- 相机自动对焦(草稿)
- 自动对焦 AF(上)
- 2012中国企业 对云计算关注度及驱动力调查报告
- AS方式重写Flex组件常规步骤
- Java串行化机制
- 4讲 图像 表格 实际应用-菜谱 课堂练习-课程表
- Android ApiDemos示例解析(189):Views->ScrollBars->2.Fancy
- 转老戴自动对焦camera view
- 开发multiboot内核 - 死得很慘
- SQLite在多线程环境下的应用
- Android系统开机画面修改
- 在ubuntu x86_64 GCC4.6上ics编译错误以及解决办法
- Flex数组详解[转]
- 动态规划_最长递增子序列
- window.location.search用法
- adb 常用命令整理