import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.PixelFormat; import android.hardware.Camera; import android.util.Log; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; public class PreView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder = null; private Camera mCamera = null; private Bitmap mBitmap = null; public PreView(Context context) { super(context); Log.i("TAG", "PreView()"); // TODO Auto-generated constructor stub holder = this.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.i("TAG", "surfaceChanged"); // TODO Auto-generated method stub Camera.Parameters parameters = mCamera.getParameters(); parameters.setPictureFormat(PixelFormat.JPEG); parameters.setPreviewSize(320, 480); // parameters.setPictureSize(320, 480); mCamera.setParameters(parameters); mCamera.startPreview(); } public void surfaceCreated(SurfaceHolder holder) { Log.i("TAG", "surfaceCreated"); // TODO Auto-generated method stub mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { mCamera.release(); mCamera = null; } } public void surfaceDestroyed(SurfaceHolder holder) { Log.i("TAG", "surfaceDestroyed"); // TODO Auto-generated method stub mCamera.stopPreview(); mCamera = null; } public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){ if(mCamera !=null){ mCamera.takePicture(null, null,pic); } } return super.onKeyDown(keyCode, event); } public Camera.PictureCallback pic = new Camera.PictureCallback(){ public void onPictureTaken(byte[] data, Camera camera) { // TODO Auto-generated method stub mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length); File f = new File(android.os.Environment.getExternalStorageDirectory()+"/camera1.jpg"); try { BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f)); mBitmap.compress(Bitmap.CompressFormat.JPEG, 80, os); os.flush(); os.close(); Canvas canvas = holder.lockCanvas(); canvas.drawBitmap(mBitmap, 0, 0, null); holder.unlockCanvasAndPost(canvas); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; } ///**************************************************CameraApplication import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.Window; public class CameraApplication extends Activity { /** Called when the activity is first created. */ private PreView pv = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); pv = new PreView(this); setContentView(pv); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub return pv.onKeyDown(keyCode, event); } } ///****************************************************AndroidManifest XML: