zoukankan      html  css  js  c++  java
  • 采用camera拍照

    MainActivity

    public class MainActivity extends Activity { 

     protected static final String TAG = "MainActivity";

     private static final int MEDIA_TYPE_IMAGE = 1;

     private static final int MEDIA_TYPE_VIDEO = 2;

     private Camera mCamera;

     private FrameLayout preview;

     private CameraPreview mPreview;

     private PictureCallback mPicture = new PictureCallback() {

      @Override

      public void onPictureTaken(byte[] data, Camera camera) {

       File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);

       if (pictureFile == null) {

        return;

       }

       try {

        FileOutputStream fos = new FileOutputStream(pictureFile);

        fos.write(data);

        fos.close();

       } catch (FileNotFoundException e) {

        Log.d(TAG, "File not found: " + e.getMessage());

       } catch (IOException e) {

        Log.d(TAG, "Error accessing file: " + e.getMessage());

       }

      }

     };

     @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.activity_main);

      // Create an instance of Camera

      mCamera = getCameraInstance();

      // Create our Preview view and set it as the content of our activity.

      mPreview = new CameraPreview(this, mCamera);

      preview = (FrameLayout) findViewById(R.id.camera_preview);

      preview.addView(mPreview);

      // Add a listener to the Capture button

      Button captureButton = (Button) findViewById(R.id.button_capture);

      captureButton.setOnClickListener(new View.OnClickListener() {

       @Override

       public void onClick(View v) {

        mCamera.autoFocus(new AutoFocusCallback() {

         @Override

         public void onAutoFocus(boolean arg0, Camera arg1) {

          mCamera.takePicture(null, null, mPicture);

         }

        });

       }

      });

     }

     /**

      * 判断设备是否有摄像头

      */

     private boolean checkCameraHardware(Context context) {

      if (context.getPackageManager().hasSystemFeature(

        PackageManager.FEATURE_CAMERA)) {

       // this device has a camera

       return true;

      } else {

       // no camera on this device

       return false;

      }

     }

     /**

      * 以一种安全方式去初始化一个Camera对象

      */

     public static Camera getCameraInstance() {

      Camera c = null;

      try {

       c = Camera.open(); // attempt to get a Camera instance

      } catch (Exception e) {

       // Camera is not available (in use or does not exist)

      }

      return c; // returns null if camera is unavailable

     }

     /** Create a File for saving an image or video */

     private static File getOutputMediaFile(int type) {

      // To be safe, you should check that the SDCard is mounted

      // using Environment.getExternalStorageState() before doing this.

      File mediaStorageDir = new File(

        Environment

          .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),

        "MyCameraApp");

      // This location works best if you want the created images to be shared

      // between applications and persist after your app has been uninstalled.

      // Create the storage directory if it does not exist

      if (!mediaStorageDir.exists()) {

       if (!mediaStorageDir.mkdirs()) {

        Log.d("MyCameraApp", "failed to create directory");

        return null;

       }

      }

      // Create a media file name

      String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")

        .format(new Date());

      File mediaFile;

      if (type == MEDIA_TYPE_IMAGE) {

       mediaFile = new File(mediaStorageDir.getPath() + File.separator

         + "IMG_" + timeStamp + ".jpg");

      } else if (type == MEDIA_TYPE_VIDEO) {

       mediaFile = new File(mediaStorageDir.getPath() + File.separator

         + "VID_" + timeStamp + ".mp4");

      } else {

       return null;

      }

      System.out.println(mediaFile.getPath());

      return mediaFile;

     }

     @Override

     protected void onPause() {

      super.onPause();

      if (mCamera != null) {

       mCamera.release(); // release the camera for other applications

       mCamera = null;

      }

     }

    }

    A basic Camera preview class

    public class CameraPreview extends SurfaceView implements

      SurfaceHolder.Callback {

     private static final String TAG = "CameraPreview";

     private SurfaceHolder mHolder;

     private Camera mCamera;

     public CameraPreview(Context context, Camera camera) {

      super(context);

      mCamera = camera;

      // Install a SurfaceHolder.Callback so we get notified when the

      // underlying surface is created and destroyed.

      mHolder = this.getHolder();

      mHolder.addCallback(this);

      // deprecated setting, but required on Android versions prior to 3.0

      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

     }

     public void surfaceCreated(SurfaceHolder holder) {

      // The Surface has been created, now tell the camera where to draw the

      // preview.

      try {

       mCamera.setPreviewDisplay(holder);

       mCamera.startPreview();

      } catch (IOException e) {

       Log.d(TAG, "Error setting camera preview: " + e.getMessage());

      }

     }

     public void surfaceDestroyed(SurfaceHolder holder) {

      // empty. Take care of releasing the Camera preview in your activity.

     }

     public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

      // If your preview can change or rotate, take care of those events here.

      // Make sure to stop the preview before resizing or reformatting it.

      if (mHolder.getSurface() == null) {

       // preview surface does not exist

       return;

      }

      // stop preview before making changes

      try {

       mCamera.stopPreview();

      } catch (Exception e) {

       // ignore: tried to stop a non-existent preview

      }

      // set preview size and make any resize, rotate or

      // reformatting changes here

      // start preview with new settings

      try {

       mCamera.setPreviewDisplay(mHolder);

       mCamera.startPreview();

      } catch (Exception e) {

       Log.d(TAG, "Error starting camera preview: " + e.getMessage());

      }

     }

    }


    Manifest

    <?xml version="1.0" encoding="utf-8"?>

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"

        package="com.itheima.carema"

        android:versionCode="1"

        android:versionName="1.0" >

        <uses-feature android:name="android.hardware.camera" />

        <uses-permission android:name="android.permission.CAMERA" />

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

        <uses-permission android:name="android.permission.RECORD_AUDIO" />

        <uses-sdk

            android:minSdkVersion="8"

            android:targetSdkVersion="18" />

        <application

            android:allowBackup="true"

            android:icon="@drawable/ic_launcher"

            android:label="@string/app_name"

            android:theme="@style/AppTheme" >

            <activity

                android:name="com.itheima.carema.MainActivity"

                android:label="@string/app_name"

                android:screenOrientation="landscape" >

                <intent-filter>

                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />

                </intent-filter>

            </activity>

        </application>

    </manifest>

    Layout

    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:orientation="horizontal"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        >

      <FrameLayout

        android:id="@+id/camera_preview"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:layout_weight="1"

        />

      <Button

        android:id="@+id/button_capture"

        android:text="Capture"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="center"

        />

    </LinearLayout>

  • 相关阅读:
    C#聊天+五子棋
    分页
    用户自定义控件(.ascx)
    一、Text To Speech
    验证码
    白话学习MVC(三)页面周期二
    二、Speech To Text
    微软云体验营 北京站 ,4月27日免费开营啦!名额有限速速报名!
    Windows 8 页面应用测试(2)
    《Windows 8应用开发权威指南》图书开始在网络上预售
  • 原文地址:https://www.cnblogs.com/freenovo/p/4469811.html
Copyright © 2011-2022 走看看