019_04简易相机

 1 package com.example.day19_04simplecamera;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 
 8 public class MainActivity extends Activity {
 9 
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_main);
14     }
15 
16     public void takephoto(View v){
17         Intent intent = new Intent();
18         intent.setClass(this, TakePhoto.class);
19         startActivity(intent);
20         
21     }
22     
23     public void takevideo(View v){
24         Intent intent = new Intent();
25         intent.setClass(this, TakeVideo.class);
26         startActivity(intent);
27     }
28 }
  1 package com.example.day19_04simplecamera;
  2 
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7 
  8 import android.app.Activity;
  9 import android.graphics.Bitmap;
 10 import android.graphics.BitmapFactory;
 11 import android.graphics.Bitmap.CompressFormat;
 12 import android.hardware.Camera;
 13 import android.hardware.Camera.AutoFocusCallback;
 14 import android.hardware.Camera.Parameters;
 15 import android.hardware.Camera.PictureCallback;
 16 import android.os.Bundle;
 17 import android.view.SurfaceHolder;
 18 import android.view.SurfaceHolder.Callback;
 19 import android.view.SurfaceView;
 20 import android.view.View;
 21 import android.widget.Toast;
 22 
 23 public class TakePhoto extends Activity{
 24     private Camera camera;
 25    @Override
 26     protected void onCreate(Bundle savedInstanceState) {
 27     // TODO Auto-generated method stub
 28        super.onCreate(savedInstanceState);
 29        setContentView(R.layout.takephoto);
 30        
 31        SurfaceView surfaceView = (SurfaceView) findViewById(R.id.sf_photo);
 32        SurfaceHolder holder = surfaceView.getHolder();
 33        
 34        holder.addCallback(new Callback() {
 35         @Override
 36         public void surfaceCreated(SurfaceHolder holder) {
 37             System.out.println("TakePhoto.onCreate(...).new Callback() {...}.surfaceCreated()");
 38             camera = Camera.open();
 39                try {
 40                 camera.setPreviewDisplay(holder);
 41                 camera.startPreview();
 42             } catch (IOException e) {
 43                 // TODO Auto-generated catch block
 44                 e.printStackTrace();
 45             }
 46         }
 47         
 48         @Override
 49         public void surfaceChanged(SurfaceHolder holder, int format, int width,
 50                 int height) {
 51             // TODO Auto-generated method stub            
 52         }
 53         
 54         @Override
 55         public void surfaceDestroyed(SurfaceHolder holder) {
 56             // TODO Auto-generated method stub
 57             System.out
 58                     .println("TakePhoto.onCreate(...).new Callback() {...}.surfaceDestroyed()");
 59             camera.stopPreview();
 60             camera.release();
 61         }
 62         
 63        });
 64        
 65     } 
 66 
 67    
 68     public void takephoto(View V){      
 69         camera.autoFocus( new AutoFocusCallback() {        
 70             @Override
 71             public void onAutoFocus(boolean success, Camera camera) {
 72                 // TODO Auto-generated method stub
 73                 //对焦完成之后,就应该拍照
 74                 Parameters parameters = camera.getParameters();
 75                  takephotobycamera();        
 76             }
 77         });
 78     }
 79     
 80     
 81     private void takephotobycamera(){
 82         camera.takePicture(null, null, new PictureCallback() {        
 83             @Override
 84             public void onPictureTaken(byte[] data, Camera camera) {
 85                 // TODO Auto-generated method stub            
 86                 Bitmap  bitmap= BitmapFactory.decodeByteArray(data, 0, data.length);
 87                 FileOutputStream fos ;
 88                 try {
 89                     fos = new FileOutputStream(new File("storage/sdcard1/photo1.jpeg"));
 90                     boolean success=bitmap.compress(CompressFormat.JPEG, 100, fos);
 91                     if(success)
 92                         Toast.makeText(TakePhoto.this, "保存成功", 1).show();
 93                     else {
 94                         Toast.makeText(TakePhoto.this, "保存失败", 1).show();
 95                     }
 96                 } catch (FileNotFoundException e) {
 97                     // TODO Auto-generated catch block
 98                     e.printStackTrace();
 99                 }
100 
101                  ////系统相机拍完照之后,会自动停止预览 ,启动预览
102                  camera.startPreview();
103                 
104             }
105         });
106     }
107 }
  1 package com.example.day19_04simplecamera;
  2 
  3 import java.io.IOException;
  4 
  5 import android.app.Activity;
  6 import android.hardware.Camera;
  7 import android.media.AudioManager;
  8 import android.media.CamcorderProfile;
  9 import android.media.MediaRecorder;
 10 import android.media.MediaRecorder.AudioSource;
 11 import android.media.MediaRecorder.VideoSource;
 12 import android.os.Bundle;
 13 import android.view.SurfaceHolder;
 14 import android.view.SurfaceView;
 15 import android.view.View;
 16 import android.view.SurfaceHolder.Callback;
 17 
 18 public class TakeVideo extends Activity {
 19     private Camera camera;
 20     private SurfaceHolder holder;
 21     private MediaRecorder mediaRecorder;
 22 
 23      @Override
 24     protected void onCreate(Bundle savedInstanceState) {
 25         // TODO Auto-generated method stub
 26         super.onCreate(savedInstanceState);
 27         setContentView(R.layout.takevideo);
 28         
 29        SurfaceView surfaceView = (SurfaceView) findViewById(R.id.sf_photo);
 30        holder = surfaceView.getHolder();
 31        
 32        holder.addCallback(new Callback() {
 33 
 34         @Override
 35         public void surfaceCreated(SurfaceHolder holder) {
 36             System.out
 37                     .println("TakePhoto.onCreate(...).new Callback() {...}.surfaceCreated()");
 38             camera = Camera.open();
 39                try {
 40                 camera.setPreviewDisplay(holder);
 41                 camera.startPreview();
 42             } catch (IOException e) {
 43                 // TODO Auto-generated catch block
 44                 e.printStackTrace();
 45             }
 46         }
 47         
 48         @Override
 49         public void surfaceChanged(SurfaceHolder holder, int format, int width,
 50                 int height) {
 51             // TODO Auto-generated method stub            
 52         }
 53         
 54         @Override
 55         public void surfaceDestroyed(SurfaceHolder holder) {
 56             // TODO Auto-generated method stub
 57             System.out
 58                     .println("TakePhoto.onCreate(...).new Callback() {...}.surfaceDestroyed()");
 59             camera.stopPreview();
 60             camera.release();
 61         }
 62         
 63        });
 64         
 65     }
 66      
 67      
 68      public void start(View v){
 69          
 70          //停止preview
 71          camera.stopPreview();
 72          //解锁camera
 73          camera.unlock();
 74          
 75          mediaRecorder = new MediaRecorder();
 76          //关联摄像头
 77          mediaRecorder.setCamera(camera);
 78          //设置音频源和视频源
 79          mediaRecorder.setAudioSource( AudioSource.CAMCORDER);
 80          mediaRecorder.setVideoSource(VideoSource.CAMERA);
 81 
 82          //设置录视频的配置参数         
 83          CamcorderProfile profile  = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
 84          mediaRecorder.setProfile(profile);
 85          
 86          //设置输出到哪里
 87          mediaRecorder.setOutputFile("storage/sdcard1/video.mp4");
 88          mediaRecorder.setPreviewDisplay(holder.getSurface());
 89          
 90          //开始录制视频
 91          try {
 92             mediaRecorder.prepare();
 93          } catch (IllegalStateException e) {
 94             // TODO Auto-generated catch block
 95             e.printStackTrace();
 96          } catch (IOException e) {
 97             // TODO Auto-generated catch block
 98             e.printStackTrace();
 99          }
100          mediaRecorder.start();
101          
102      }
103      
104      public void stop(View v){
105          
106          if (mediaRecorder!=null) {
107              mediaRecorder.stop();
108              mediaRecorder.release();
109         }
110          //注:此时画面中已经没有预览了,需要重新锁定摄像头,开启预览才会有画面!
111         // 14. 锁定摄像头
112          camera.lock();
113          // 15. 再打开摄像头的预览
114          camera.startPreview();
115 
116         
117          
118      }
119 }
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.day19_04simplecamera"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="14"
 9         android:targetSdkVersion="21" />
10     <uses-permission android:name="android.permission.CAMERA"/>
11     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
12     <uses-permission android:name="android.permission.RECORD_AUDIO"/>
13 
14     <application
15         android:allowBackup="true"
16         android:icon="@drawable/ic_launcher"
17         android:label="@string/app_name"
18         android:theme="@style/AppTheme" >
19         <activity
20             android:name=".MainActivity"
21             android:label="@string/app_name" >
22             <intent-filter>
23                 <action android:name="android.intent.action.MAIN" />
24 
25                 <category android:name="android.intent.category.LAUNCHER" />
26             </intent-filter>
27         </activity>
28         <activity android:name=".TakePhoto"
29             android:screenOrientation="landscape"></activity>
30         <activity android:name=".TakeVideo"
31             android:screenOrientation="landscape"></activity>
32     </application>
33 
34 </manifest>
物随心转,境由心造,一切烦恼皆由心生。
原文地址:https://www.cnblogs.com/woodrow2015/p/4544078.html