自定义Camera之简单介绍

Posted zealifree005

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义Camera之简单介绍相关的知识,希望对你有一定的参考价值。

拍照界面:

因为取景框要有实时刷新的效果所以普通的view不行,一般使用surfaceView

上面的按钮是拍照按钮

[java]  view plain  copy  print ?
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical"  
  6.     tools:context="com.example.cameratest1.MyCamera" >  
  7.   
  8.     <Button  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:onClick="capture"  
  12.         android:text="Capture" />  
  13.   
  14.     <SurfaceView  
  15.         android:id="@+id/preview"  
  16.         android:layout_width="match_parent"  
  17.         android:layout_height="match_parent" />  
  18.   
  19. </LinearLayout>  

然后写一个Activity实现拍照的逻辑控制,MyCamera,

实现几个方法

拍照按钮点击事件

public void capture(View view)

 获取Camera对象方法

private Camera getCamera()

开始预览相机内容方法,将Camera与SurfaceView进行绑定,
使Camera的实时预览效果显示在SurfaceView
 中

private void setStartPreview(Camera camera,SurfaceHolder holder)

* 释放系统相机资源
private void releaseCamera()

全部代码

[java]  view plain  copy  print ?
  1. public class MyCamera extends Activity implements SurfaceHolder.Callback  
  2.   
  3.     private Camera mCamera;  
  4.     private SurfaceView mPreview;  
  5.   
  6.     private SurfaceHolder mHolder;  
  7.     private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback()   
  8.   
  9.         @Override  
  10.         public void onPictureTaken(byte[] data, Camera camera)   
  11.             // TODO Auto-generated method stub  
  12.             //这里的data是真实图片数据不是缩略图  
  13.             File tempFile = new File("/sdcard/tddemp.png");  
  14.             try   
  15.                 FileOutputStream fos = new FileOutputStream(tempFile);  
  16.                 fos.write(data);//将拍到的数据写入文件  
  17.                 fos.close();  
  18.                 //将拍到的数据传递到resultActivity中显示出来  
  19.                 Intent intent = new Intent(MyCamera.this, ResultActivity.class);  
  20.                 intent.putExtra("picPath", tempFile.getAbsolutePath());  
  21.                 startActivity(intent);  
  22.                 MyCamera.this.finish();  
  23.              catch (FileNotFoundException e)   
  24.                 // TODO Auto-generated catch block  
  25.                 e.printStackTrace();  
  26.              catch (IOException e)   
  27.                 // TODO Auto-generated catch block  
  28.                 e.printStackTrace();  
  29.               
  30.           
  31.     ;  
  32.     @Override  
  33.     protected void onCreate(Bundle savedInstanceState)   
  34.         super.onCreate(savedInstanceState);  
  35.         setContentView(R.layout.activity_my_camera);  
  36.         mPreview = (SurfaceView) findViewById(R.id.preview);  
  37.         mHolder = mPreview.getHolder();  
  38.         mHolder.addCallback(this);  
  39.       
  40.     public void capture(View view)  
  41.         //设置拍照参数  
  42.         Camera.Parameters parameters = mCamera.getParameters();  
  43.         parameters.setPictureFormat(ImageFormat.JPEG);//设置拍照格式  
  44.         parameters.setPictureSize(800400);//设置拍照大小  
  45.         parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);//设置自动对焦  
  46.         //获取最清晰的焦距  
  47.         mCamera.autoFocus(new Camera.AutoFocusCallback()   
  48.   
  49.             @Override  
  50.             public void onAutoFocus(boolean success, Camera camera)   
  51.                 // TODO Auto-generated method stub  
  52.                 if (success)   
  53.                     mCamera.takePicture(nullnull, mPictureCallback);  
  54.                     //第三个参数是回调方法  
  55.                   
  56.   
  57.               
  58.         );  
  59.   
  60.       
  61.   
  62.     /** 
  63.      * 使用系统相机需要以下方法 
  64.      */  
  65.     /** 
  66.      * 获取Camera对象 
  67.      * @return 
  68.      */  
  69.     private Camera getCamera()  
  70.         //这里使用导入的是硬件的Camera,import android.hardware.Camera;  
  71.         Camera camera;  
  72.         camera = Camera.open();  
  73.         return camera;  
  74.       
  75.     /** 
  76.      * 开始预览相机内容,将Camera与SurfaceView进行绑定, 
  77.      * 使Camera的实时预览效果显示在SurfaceView 
  78.      * 中 
  79.      */  
  80.     private void setStartPreview(Camera camera,SurfaceHolder holder)  
  81.         try   
  82.             camera.setPreviewDisplay(holder);  
  83.             camera.startPreview();  
  84.             camera.setDisplayOrientation(90);//系统默认显示横屏的Camera,旋转为竖屏  
  85.          获取相机焦距 OpenCV Android

    如何使用Java在Android中获取相机的焦距

    Android Camera增加自定义图像处理并录制MP4

    Android Camera增加自定义图像处理并录制MP4

    Camera常用技术参数和术语

    Camera常用技术参数和术语