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;
|
}
|
};
|
}
|
|