Mega Code Archive

 
Categories / Android / Hardware
 

Take and preview Photo

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="vertical"   android:layout_width="fill_parent"   android:layout_height="fill_parent">   <SurfaceView     android:id="@+id/preview"     android:layout_width="fill_parent"     android:layout_height="fill_parent"   />   <RelativeLayout     android:layout_width="fill_parent"     android:layout_height="100dip"     android:layout_alignParentBottom="true"     android:gravity="center_vertical"     android:background="#A000">     <Button       android:layout_width="100dip"       android:layout_height="wrap_content"       android:text="Cancel"       android:onClick="onCancelClick"     />     <Button       android:layout_width="100dip"       android:layout_height="wrap_content"       android:layout_alignParentRight="true"       android:text="Snap Photo"       android:onClick="onSnapClick"     />   </RelativeLayout> </RelativeLayout> package app.test; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import android.app.Activity; import android.hardware.Camera; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Toast; public class PreviewActivity extends Activity implements SurfaceHolder.Callback, Camera.ShutterCallback, Camera.PictureCallback {     Camera mCamera;     SurfaceView mPreview;          @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);                  mPreview = (SurfaceView)findViewById(R.id.preview);         mPreview.getHolder().addCallback(this);         mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);                  mCamera = Camera.open();     }          @Override     public void onPause() {         super.onPause();         mCamera.stopPreview();     }          @Override     public void onDestroy() {         super.onDestroy();         mCamera.release();         Log.d("CAMERA","Destroy");     }          public void onCancelClick(View v) {         finish();     }          public void onSnapClick(View v) {         mCamera.takePicture(this, null, null, this);     }     @Override     public void onShutter() {         Toast.makeText(this, "Click!", Toast.LENGTH_SHORT).show();     }     @Override     public void onPictureTaken(byte[] data, Camera camera) {         //Here, we chose internal storage         try {             FileOutputStream out = openFileOutput("picture.jpg", Activity.MODE_PRIVATE);             out.write(data);             out.flush();             out.close();         } catch (FileNotFoundException e) {             e.printStackTrace();         } catch (IOException e) {             e.printStackTrace();         }         camera.startPreview();     }     @Override     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {         Camera.Parameters params = mCamera.getParameters();         List<Camera.Size> sizes = params.getSupportedPreviewSizes();         Camera.Size selected = sizes.get(0);         params.setPreviewSize(selected.width,selected.height);         mCamera.setParameters(params);                  mCamera.setDisplayOrientation(90);         mCamera.startPreview();     }     @Override     public void surfaceCreated(SurfaceHolder holder) {         try {             mCamera.setPreviewDisplay(mPreview.getHolder());         } catch (Exception e) {             e.printStackTrace();         }     }     @Override     public void surfaceDestroyed(SurfaceHolder holder) {         Log.i("PREVIEW","surfaceDestroyed");     } }