camera

package com.wuhan.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CameraActivity extends Activity {
 private SurfaceView view;
 private SurfaceHolder holder;
 private Camera camera;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.camera);
  view=(SurfaceView)findViewById(R.id.camera);
  holder=view.getHolder();
  holder.addCallback(callback);
  holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 }
 
 private SurfaceHolder.Callback callback=new SurfaceHolder.Callback() {
  
  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
   // TODO Auto-generated method stub
   camera.stopPreview();
   camera.release();
   camera=null;
  }
  
  @Override
  public void surfaceCreated(SurfaceHolder holder) {
   // TODO Auto-generated method stub
   camera=Camera.open();
   try {
    camera.setPreviewDisplay(holder);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
   // TODO Auto-generated method stub
   Camera.Parameters parameters=camera.getParameters();
   parameters.setPreviewSize(width, height);
   parameters.setPictureFormat(PixelFormat.JPEG);
   camera.setParameters(parameters);
   camera.startPreview();
  }
 };
 
 class SavePicture extends AsyncTask<byte[], String, String>{

  @Override
  protected String doInBackground(byte[]... params) {
   // TODO Auto-generated method stub
   File picture=new File(Environment.getExternalStorageDirectory(),"picture.jpg");
   if(picture.exists()){
    picture.delete();
   }
   try {
    FileOutputStream fos=new FileOutputStream(picture.getPath());
    fos.write(params[0]);
    fos.close();
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return null;
  }
  
 }
 
 Camera.PictureCallback pCallback=new Camera.PictureCallback() {
  
  @Override
  public void onPictureTaken(byte[] data, Camera camera) {
   // TODO Auto-generated method stub
   new SavePicture().execute(data);
   camera.startPreview();
  }
 };
 
 private void takePic(){
  camera.stopPreview();
  camera.takePicture(null, null, pCallback);
  
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
  if(keyCode==KeyEvent.KEYCODE_CAMERA || keyCode==KeyEvent.KEYCODE_SEARCH){
   takePic();
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }
 
 
 
}


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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值