您的位置:首页 > 其它

如何调用系统相机

2015-11-27 16:48 363 查看
今天需要用到调用系统相机的功能,就在网上看看,现在谢谢总结!嘻嘻

调用系统的相机

首先需要通过Intent对象那个来加载MediaStore.ACTION_IMAGE_CAPTURE(Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);)

然后直接 startActivity(intent ),就可以调用到了。



调用系统的相机2

步骤一同上面的第一步

第二步的话需要调用startActivityForResult(intent, REQ_1);

第二步调用activity的onActivityResult方法,通过穿的参数REQ_1来确定你需要打开的相机





自己定义一个相机

首先在AndroidManifest.xml文件里写上



2.同上2(这里给上一张图)

自己定义一个相机2

创建相机

创建SurfaceView

关联相机和SurfaceView

调整相机的显示效果

自定义相机的预览界面

你也可以到这里学习一下http://www.imooc.com/learn/543

源码下载

private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
// data完整的拍照数据
@SuppressLint("SdCardPath")
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File jpgFile = new File("/sdcard/test.jpeg");
try {
FileOutputStream fos = new FileOutputStream(jpgFile);
fos.write(data);
fos.close();
Intent intent = new Intent(CustomCameraActivity.this,
MResultActivity.class);
intent.putExtra("picPath", jpgFile.getAbsolutePath());
startActivity(intent);
CustomCameraActivity.this.finish();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_camera);
mSurfaceView = (SurfaceView) findViewById(R.id._surfaceView);

mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);

}

public void captrue(View view) {
// 获取设置相机的Parameters
Camera.Parameters mParameters = mCamera.getParameters();
// 设置拍照的图片类型
mParameters.setPictureFormat(ImageFormat.JPEG);
// 设置拍照的图片大小
mParameters.setPictureSize(800, 400);
// //设置拍照自动聚焦
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
mCamera.autoFocus(this);

}

/**
* mCamera.autoFocus(this)的回调方法
*
* @param success
* @param camera
*/
@Override
public void onAutoFocus(boolean success, Camera camera) {
if (success) {
mCamera.takePicture(null, null, mPictureCallback);
}

}

/**
* 获得Camera对象
*
* @return
*/
private Camera getCamera() {
Camera mCamera = null;
if (mCamera == null) {
mCamera = Camera.open();
}

return mCamera;

}

/**
* 开始预览相机内容
*/
private void setStartPreview(Camera camera, SurfaceHolder holder) {

try {
camera.setPreviewDisplay(holder);
// 将系统Camera预览角度尽心调整
camera.setDisplayOrientation(90);
camera.startPreview();

} catch (IOException e) {
e.printStackTrace();
}

}

/**
* 释放相机资源
*/
private void releaseCamera() {

if (mCamera != null) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}

}

@Override
protected void onResume() {
super.onResume();
if (mCamera == null) {
mCamera = getCamera();
if (mSurfaceHolder != null) {
setStartPreview(mCamera, mSurfaceHolder);
}
}
}

@Override
protected void onPause() {
super.onPause();
releaseCamera();
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
setStartPreview(mCamera, mSurfaceHolder);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
setStartPreview(mCamera, mSurfaceHolder);

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
releaseCamera();
}

----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: