| New file |
| | |
| | | package cn.com.basic.face.base;
|
| | |
|
| | | import java.io.IOException;
|
| | | import java.io.OutputStream;
|
| | | import java.util.List;
|
| | |
|
| | | import android.app.Activity;
|
| | | import android.content.ContentValues;
|
| | | import android.content.Intent;
|
| | | import android.hardware.Camera;
|
| | | import android.net.Uri;
|
| | | import android.os.Bundle;
|
| | | import android.provider.MediaStore.Images;
|
| | | import android.util.Log;
|
| | | import android.view.Menu;
|
| | | import android.view.MenuItem;
|
| | | import android.view.MotionEvent;
|
| | | import android.view.SurfaceHolder;
|
| | | import android.view.SurfaceView;
|
| | | import android.view.View;
|
| | | import android.view.View.OnTouchListener;
|
| | |
|
| | | import com.bsk.zhangbo.demoforbsk.R;
|
| | |
|
| | | public class PictureTaker extends Activity
|
| | | {
|
| | | private static final String TAG = "PICTURE_TAKER";
|
| | |
|
| | | private SurfaceView surfaceView;
|
| | | private SurfaceHolder surfaceHolder;
|
| | | private boolean isPreviewing;
|
| | |
|
| | | private Camera camera;
|
| | | private List<String> effects;
|
| | | private List<Camera.Size> sizes;
|
| | | private String effect = Camera.Parameters.EFFECT_NONE;
|
| | |
|
| | | @Override
|
| | | public void onCreate(Bundle bundle)
|
| | | {
|
| | | super.onCreate(bundle);
|
| | | setContentView(R.layout.fragment_register_camera_preview);
|
| | |
|
| | | surfaceView = (SurfaceView) findViewById(R.id.cameraSurfaceView);
|
| | | surfaceView.setOnTouchListener(touchListener);
|
| | |
|
| | | surfaceHolder = surfaceView.getHolder();
|
| | | surfaceHolder.addCallback(surfaceCallback);
|
| | |
|
| | | surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
|
| | | }
|
| | |
|
| | | @Override
|
| | | public boolean onCreateOptionsMenu(Menu menu)
|
| | | {
|
| | | super.onCreateOptionsMenu(menu);
|
| | |
|
| | | for (String effect : effects)
|
| | | menu.add(effect);
|
| | |
|
| | | return true;
|
| | | }
|
| | |
|
| | | @Override
|
| | | public boolean onOptionsItemSelected(MenuItem item)
|
| | | {
|
| | | Camera.Parameters p = camera.getParameters();
|
| | | p.setColorEffect(item.getTitle().toString());
|
| | | camera.setParameters(p);
|
| | | return true;
|
| | | }
|
| | |
|
| | | private SurfaceHolder.Callback surfaceCallback =
|
| | | new SurfaceHolder.Callback()
|
| | | {
|
| | | @Override
|
| | | public void surfaceDestroyed(SurfaceHolder arg0)
|
| | | {
|
| | | camera.stopPreview();
|
| | | isPreviewing = false;
|
| | | camera.release();
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void surfaceCreated(SurfaceHolder arg0)
|
| | | {
|
| | | camera = Camera.open();
|
| | | effects = camera.getParameters().getSupportedColorEffects();
|
| | | sizes = camera.getParameters().getSupportedPreviewSizes();
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void surfaceChanged(SurfaceHolder holder, int format,
|
| | | int width, int height)
|
| | | {
|
| | | if (isPreviewing)
|
| | | camera.stopPreview();
|
| | |
|
| | | Camera.Parameters p = camera.getParameters();
|
| | | p.setPreviewSize(sizes.get(0).width, sizes.get(0).height);
|
| | | p.setColorEffect(effect);
|
| | | p.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
|
| | | camera.setParameters(p);
|
| | |
|
| | | try
|
| | | {
|
| | | camera.setPreviewDisplay(holder); // display using holder
|
| | | }
|
| | | catch (IOException e)
|
| | | {
|
| | | Log.v(TAG, e.toString());
|
| | | }
|
| | |
|
| | | camera.startPreview(); // begin the preview
|
| | | isPreviewing = true;
|
| | | }
|
| | | };
|
| | |
|
| | | Camera.PictureCallback pictureCallback = new Camera.PictureCallback()
|
| | | {
|
| | | public void onPictureTaken(byte[] imageData, Camera c)
|
| | | {
|
| | | String fileName = "Slideshow_" + System.currentTimeMillis();
|
| | |
|
| | | ContentValues values = new ContentValues();
|
| | | values.put(Images.Media.TITLE, fileName);
|
| | | values.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
|
| | | values.put(Images.Media.MIME_TYPE, "image/jpg");
|
| | |
|
| | | Uri uri = getContentResolver().insert(
|
| | | Images.Media.EXTERNAL_CONTENT_URI, values);
|
| | |
|
| | | try
|
| | | {
|
| | | OutputStream outStream =
|
| | | getContentResolver().openOutputStream(uri);
|
| | | outStream.write(imageData);
|
| | | outStream.flush();
|
| | | outStream.close();
|
| | |
|
| | | Intent returnIntent = new Intent();
|
| | | returnIntent.setData(uri);
|
| | | setResult(RESULT_OK, returnIntent);
|
| | |
|
| | | finish();
|
| | | }
|
| | | catch (IOException ex)
|
| | | {
|
| | | setResult(RESULT_CANCELED);
|
| | | }
|
| | | }
|
| | | };
|
| | |
|
| | | private OnTouchListener touchListener = new OnTouchListener()
|
| | | {
|
| | | @Override
|
| | | public boolean onTouch(View v, MotionEvent event)
|
| | | {
|
| | | camera.takePicture(null, null, pictureCallback);
|
| | | return false;
|
| | | }
|
| | | };
|
| | | }
|
| | |
|