相机的实现

来源:互联网 发布:telnet 在端口23失败 编辑:程序博客网 时间:2024/06/09 18:14

public class CameraActivity extends Activity
{

 private SurfaceView surfaceView;

 private SurfaceHolder sh;

 private boolean ispraw = false;

 private Camera camera;

 @Override
 public void onCreate(Bundle savedInstanceState)
 {

  super.onCreate(savedInstanceState);
  requestWindowFeature(getWindow().FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
  setContentView(R.layout.main);
  surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
  sh = surfaceView.getHolder();
  sh.addCallback(new callback());
  sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 }

 private class callback implements SurfaceHolder.Callback
 {

  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
  {

  }

  @Override
  public void surfaceCreated(SurfaceHolder holder)
  {
   try
   {
    camera = Camera.open();
    camera.setPreviewDisplay(holder);
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPictureFormat(ImageFormat.JPEG);
    parameters.setPreviewFpsRange(2, 10);
    
//    parameters.setPreviewSize(480, 800);
//    camera.setParameters(parameters);
    camera.startPreview();
    
    ispraw = true;
   } catch (Exception e)
   {
    camera.release();
    camera = null;
    e.printStackTrace();
   }

  }

  @Override
  public void surfaceDestroyed(SurfaceHolder holder)
  {

   if (camera != null)
   {
    if (ispraw)
    {
     camera.stopPreview();
    }
    camera.release();
    camera = null;
   }
  }

 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event)
 {

  if (camera != null)
  {
   switch (keyCode)
   {
   case KeyEvent.KEYCODE_SEARCH:
    camera.autoFocus(new AutoFocusCallback()
    {
     
     public void onAutoFocus(boolean success, Camera camera)
     {
      if(success)
      {
       testTakePicture();
      }
     }
    });
    break;

   case KeyEvent.KEYCODE_MENU:
    // camera.autoFocus(null);
    testTakePicture();
    break;
   default:
    break;

   }
  }
  return super.onKeyDown(keyCode, event);
 }

 public void testTakePicture()
 {
  camera.takePicture(null, null, callback);
 }
 
 Camera.PictureCallback callback = new PictureCallback()
 {

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

   if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
   {
    Toast.makeText(CameraActivity.this, "sdk", Toast.LENGTH_LONG).show();
    return;
   }
   try
   {
    if (data != null)
    {
     Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
     FileOutputStream stream = new FileOutputStream(Environment.getExternalStorageDirectory() + File.separator + System.currentTimeMillis() + ".png");
     bitmap.compress(CompressFormat.PNG, 85, stream);
     stream.close();
     camera.stopPreview();
     camera.startPreview();
     System.out.println("222222222222222222222222222");
    }
   } catch (Exception e)
   {
    e.printStackTrace();
   }

  }
 };

}