首页 > 移动平台 > 详细

android 基础一 <Camera1> 预览、拍照

时间:2019-10-10 22:57:03      阅读:547      评论:0      收藏:0      [点我收藏+]


预览流程: Camera.open-->camera.setPreviewDisplay->camera.startPreview
拍照:camera.takePicture-->保存图片-->camera.startPreview

public class MainActivity extends Activity { String TAG="Camera_1111"; SurfaceView surfaceView; SurfaceHolder surfaceHolder; Camera camera; int cameraId=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e(TAG,"---------onCreate---------"); setContentView(R.layout.activity_main); surfaceView=(SurfaceView) findViewById(R.id.svCamera); surfaceHolder=surfaceView.getHolder(); surfaceHolder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { camera=Camera.open(cameraId); try { camera.setPreviewDisplay(surfaceHolder); } catch (IOException e) { e.printStackTrace(); } setCameraDisplayOrientation(); // configParameters(); camera.startPreview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.e(TAG,"---------surfaceDestroyed---------"); camera.release(); } }); } //配置预览参数 private void configParameters(){ Camera.Parameters param = camera.getParameters(); param.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); param.setPictureFormat(ImageFormat.JPEG); param.setJpegQuality(100); param.setPreviewSize(param.getSupportedPreviewSizes().get(0).width,param.getSupportedPreviewSizes().get(0).height); Log.e(TAG,"param.getSupportedPreviewSizes()"+param.getSupportedPreviewSizes().get(0).width+" X "+param.getSupportedPreviewSizes().get(0).height); param.setPictureSize(param.getSupportedPictureSizes().get(0).width,param.getSupportedPictureSizes().get(0).height); camera.setParameters(param); } //旋转预览角度 private void setCameraDisplayOrientation() { android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); android.hardware.Camera.getCameraInfo(cameraId, info); int rotation = getWindowManager().getDefaultDisplay().getRotation(); int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_270: degrees = 270; break; } int result; if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; // compensate the mirror } else { // back-facing result = (info.orientation - degrees) % 360; } Log.e(TAG,"rotation ="+result); //旋转预览的角度 camera.setDisplayOrientation(result); //----------------------------- //旋转生成的照片角度 Camera.Parameters param = camera.getParameters(); param.setRotation(result); camera.setParameters(param); } public void photo(View view){ camera.takePicture(null,null,new Camera.PictureCallback(){ @Override public void onPictureTaken(byte[] data, Camera camera) { savePicture(data); camera.startPreview(); } }); } private void savePicture(byte[] data) { String root = Environment.getExternalStorageDirectory().getPath(); File objPic = new File(root,"test.jpg"); BufferedOutputStream bos = null; try { bos = new BufferedOutputStream(new FileOutputStream(objPic)); bos.write(data); bos.flush(); Toast.makeText(this,"拍照成功",Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); }finally { if(bos!=null){ try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }

  

public class MainActivity extends Activity {

String TAG="Camera_1111";
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
Camera camera;
int cameraId=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG,"---------onCreate---------");
setContentView(R.layout.activity_main);
surfaceView=(SurfaceView) findViewById(R.id.svCamera);
surfaceHolder=surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
camera=Camera.open(cameraId);
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
e.printStackTrace();
}
setCameraDisplayOrientation();
// configParameters();
camera.startPreview();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e(TAG,"---------surfaceDestroyed---------");
camera.release();
}
});
}



//配置预览参数
private void configParameters(){
Camera.Parameters param = camera.getParameters();
param.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
param.setPictureFormat(ImageFormat.JPEG);
param.setJpegQuality(100);
param.setPreviewSize(param.getSupportedPreviewSizes().get(0).width,param.getSupportedPreviewSizes().get(0).height);
Log.e(TAG,"param.getSupportedPreviewSizes()"+param.getSupportedPreviewSizes().get(0).width+" X "+param.getSupportedPreviewSizes().get(0).height);
param.setPictureSize(param.getSupportedPictureSizes().get(0).width,param.getSupportedPictureSizes().get(0).height);
camera.setParameters(param);

}
//旋转预览角度
private void setCameraDisplayOrientation() {
android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees) % 360;
}
Log.e(TAG,"rotation ="+result);
//旋转预览的角度
camera.setDisplayOrientation(result);
//-----------------------------
//旋转生成的照片角度
Camera.Parameters param = camera.getParameters();
param.setRotation(result);
camera.setParameters(param);
}
public void photo(View view){
camera.takePicture(null,null,new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] data, Camera camera) {
savePicture(data);
camera.startPreview();
}
});
}
private void savePicture(byte[] data) {
String root = Environment.getExternalStorageDirectory().getPath();
File objPic = new File(root,"test.jpg");
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(objPic));
bos.write(data);
bos.flush();
Toast.makeText(this,"拍照成功",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

}

android 基础一 <Camera1> 预览、拍照

原文:https://www.cnblogs.com/jtzp007/p/11650575.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!