package com.demo.android.IsiCamera;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.Toast;
/*classname:IsiCamera1Activity
*modifier:public
*func:main stream
**/
public class IsiCamera1Activity extends Activity {
/** Called when the activity is first created. */
final private static String STILL_IMAGE_FILE = "capture.jpg";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//实例化自己写的CameraSurfaceView对象cameraView
final CameraSurfaceView cameraView =
new CameraSurfaceView(getApplicationContext());
FrameLayout frame = (FrameLayout) findViewById(R.id.frameLayout1);//??what's frame?
frame.addView(cameraView);
//Button shared = (Button) findViewById(R.id.shared);
//按键触发事件
//Button capture
Button capture = (Button) findViewById(R.id.capture);
capture.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
cameraView.capture(new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Log.v("Still", "Image data received from camera");
FileOutputStream fos;
try {
// Fully qualified path name. In this case, we
// use the Files subdir
String pathForAppFiles = getFilesDir().getAbsolutePath();
pathForAppFiles = pathForAppFiles + "/" + STILL_IMAGE_FILE;
Log.d("Still image filename:", pathForAppFiles);
fos = openFileOutput(STILL_IMAGE_FILE, MODE_WORLD_READABLE);
fos.write(data);
fos.close();
} catch (Exception e) {
Log.e("Still", "Error writing file", e);
}
}
});
}
});
}
//内部class
/*classname:CameraSurfaceView
* modifier:??can't be private?why?
*func:1.向该类中加入一个方法用于捕捉图像(SurfaceHolder实现??)
*2.设置触发机制
*3.定义SurfaceHolder.Callback接口
*/
private class CameraSurfaceView extends SurfaceView
implements SurfaceHolder.Callback {
private SurfaceHolder mSurfaceHolder;
private Camera camera = null;
//该类的构造函数
public CameraSurfaceView(Context context) {
super(context);
//初始化SurfaceHolder
this.mSurfaceHolder = this.getHolder();//mSurfaceView.getHolder()? how does it know?
this.mSurfaceHolder.addCallback(this);
this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//设置SurfaceHolder类型
}
//implement SurfaceHolder.Callback
@Override//necessary?
public void surfaceCreated(SurfaceHolder holder) {
try
{
this.camera = Camera.open();
camera.setPreviewDisplay(this.mSurfaceHolder);//unhandled exception type IOExceprion
}
catch(Exception e) {
Log.e("Camera","Failed to set Camera Preview Display",e);
}
}
public void surfaceChanged(SurfaceHolder holder,int format,int width,int height) {
Camera.Parameters params = camera.getParameters();
params.setPreviewSize(width,height);
camera.setParameters(params);
camera.startPreview();
//setPreviewSize后预览将会启动,这时屏幕上将显示摄像头预览画面
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera = null;
}
public boolean capture(Camera.PictureCallback jpegHandler) {
if (camera != null) {
camera.takePicture(null,null,jpegHandler);
return true;
} else {
return false;
}
}
}//private class
}//public class
- 1
- 2
- 3
- 4
前往页