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.