Monday, September 2, 2013

Custom camera in android

custom camera in android

 public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {  
 private SurfaceHolder mHolder;  
 private Camera mCamera;  
 private Context mContext;  
 public CameraPreview(Context context, Camera camera) {  
 super(context);  
 mContext = context;  
 mCamera = camera;  
 // Install a SurfaceHolder.Callback so we get notified when the  
 // underlying surface is created and destroyed.  
 mHolder = getHolder();  
 mHolder.addCallback(this);  
 // deprecated setting, but required on Android versions prior to 3.0  
 mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
 mHolder.setFixedSize(100, 100);  
 }  
 public void surfaceCreated(SurfaceHolder holder) {  
 mCamera.setDisplayOrientation(90);  
 // The Surface has been created, now tell the camera where to draw the  
 // preview.  
 try {  
 mCamera.setPreviewDisplay(holder);  
 mCamera.startPreview();  
 }  
 catch (IOException e) {  
 Log.d(  
 "DG_DEBUG", "Error setting camera preview: " + e.getMessage());  
 }  
 /*try {  
 mCamera.setPreviewDisplay(holder);  
 mCamera.setPreviewCallback(new PreviewCallback() {  
 public void onPreviewFrame(byte[] data, Camera camera) {  
 }  
 });  
 } catch (Exception e) {  
 e.printStackTrace();  
 }*/  
 }  
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {  
 // If your preview can change or rotate, take care of those events here.  
 // Make sure to stop the preview before resizing or reformatting it.  
 if (mHolder.getSurface() == null) {  
 // preview surface does not exist  
 return;  
 }  
 // stop preview before making changes  
 try {  
 mCamera.stopPreview();  
 }  
 catch (Exception e) {  
 // ignore: tried to stop a non-existent preview  
 }  
 // make any resize, rotate or reformatting changes here  
 // start preview with new settings  
 try {  
 mCamera.setPreviewDisplay(mHolder);  
 mCamera.startPreview();  
 }  
 catch (Exception e) {  
 Log.d(  
 "DG_DEBUG", "Error starting camera preview: " + e.getMessage());  
 }  
 }  
 public void surfaceDestroyed(SurfaceHolder holder) {  
 // empty. Take care of releasing the Camera preview in your activity.  
 }  
 }  
 and use the below method in your activiy which one wants custom camera   
 private  
 void createCamera() {   
 // Create an instance of Camera  
 mCamera = getCameraInstance();  
 // Setting the right parameters in the camera  
 Camera.Parameters params =  
 mCamera.getParameters();  
 // params.setPictureSize(1600, 1200);  
 params.setPictureFormat(PixelFormat.JPEG);  
 params.setJpegQuality(85);  
 mCamera.setParameters(params);  
 // Create our Preview view and set it as the content of our activity.  
 mPreview = new CameraPreview(this, mCamera);  
 FrameLayout preview = (FrameLayout) findViewById(R.id.  
 camera_preview);  
 // Calculating the width of the preview so it is proportional.  
 float widthFloat = (float) (deviceHeight) * 4 / 3;  
 int width = Math.round(widthFloat);  
 // Resizing the LinearLayout so we can make a proportional preview. This  
 // approach is not 100% perfect because on devices with a really small  
 // screen the the image will still be distorted - there is place for  
 // improvment.  
 // LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width, deviceHeight);  
 // preview.setLayoutParams(layoutParams);  
 // Adding the camera preview after the FrameLayout and before the button  
 // as a separated element.  
 preview.addView(  
 mPreview, 0);  
 }  
Take care of releasing the Camera preview in your activity.

2 comments:

  1. hi Ankitha,

    Can you please let me know the exact device on which you ran your camera code. Thanks!

    ReplyDelete
    Replies
    1. Hi,
      Tested in all device which are 3.0 above version like HTC fireball,HTC One,Google Nexus etc..

      Delete