Android学习05Camera图像采集

来源:互联网 发布:python urllib2 编辑:程序博客网 时间:2024/05/26 19:19

 

用Camera则必须要获得他的权限,新建一个项目打开AndroidManifest.xml文件在</mainfest>前面加上

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

 

给屏幕添加布局,修改main.xml文件

修改后的结果如下图:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<SurfaceView
     android:id = "@+id/surfaceView"
     android:layout_width="480px"
     android:layout_height="320px"
    />
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
   
    <Button
      android:id = "@+id/button1"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content"
      android:text = "打开"
    />
   
        <Button
      android:id = "@+id/button2"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content"
      android:text = "关闭"
    />
    </LinearLayout>
</LinearLayout>

 

 

Activity类代码如下:

 


package karant.zhan;

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;

 

public class CameraTest extends Activity implements SurfaceHolder.Callback{
   
 Camera myCamera;   //Camera对象的引用
 SurfaceView mySurfaceView;   //SurfaceView对象的引用
 SurfaceHolder mySurfaceHolder;  //SurfaceHolder对象的引用
 Button button1;
 Button button2;
 boolean isPreview = false;    //是否在浏览中
 
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        mySurfaceView =(SurfaceView)findViewById(R.id.surfaceView);//得到SurfaceView的引用
       
        button1 = (Button)findViewById(R.id.button1);
        button2 = (Button)findViewById(R.id.button2);
       
        mySurfaceHolder = mySurfaceView.getHolder(); //获得SurfaceHolder
        mySurfaceHolder.addCallback(this);
        mySurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
       
        button1.setOnClickListener(new Button.OnClickListener()   //打开按钮监听
        {
         public void onClick(View v){   //单击事件
          initCamera();    //调用初始化方法
         }

        }
        );
       
        button2.setOnClickListener( new Button.OnClickListener() //关闭按钮监听
        {
         public void onClick(View v){   //正在显示时
          if(myCamera != null&& isPreview){
           myCamera.stopPreview(); 
           myCamera.release(); 
           myCamera = null;
           isPreview = false;  //设成false
          }
         }

        }
        );
 }


 public void initCamera(){
     if(!isPreview){      //打开Camera
      myCamera = Camera.open(); 
     }
     if(myCamera != null && !isPreview){
      try {
    myCamera.setPreviewDisplay(mySurfaceHolder);
    myCamera.startPreview();  //立即运行
   } catch (Exception e) {
    e.printStackTrace();
   }
   isPreview = true;
     }
     
    }
   
   
   
   
   
   
   
 @Override
 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void surfaceCreated(SurfaceHolder arg0) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void surfaceDestroyed(SurfaceHolder arg0) {
  // TODO Auto-generated method stub
  
 }
}

 

终于把图片擦进来了内牛满面,前面都传了照片但都没擦进来,蛋疼了