Android添加拍照功能,Android开发实现拍照功能的方法实例解析

本文详细介绍了在Android中实现拍照功能的步骤,包括检查设备是否有摄像头、打开相机、设置预览界面、实现自动对焦及拍照后保存图片到SD卡的方法。提供了一个完整的代码示例,帮助开发者理解并实现这一功能。
摘要由CSDN通过智能技术生成

本文实例讲述了Android开发实现拍照功能的方法。分享给大家供大家参考,具体如下:

解析:

1)判断是否有摄像头checkCameraHardware(this)

2)获得相机camera = Camera.open(0);

3)把相机添加到mPreView = new SurfacePreView(this, mCamera);

4)实现拍照 mCamera.autoFocus

5)在拍照后使用mCamera.takePicture(null, null, mPicture);方法把图片保存到sdcard

代码实现:

/**

* 使用照相机拍照

* @author chen.lin

*

*/

public class CameraActivity extends Activity {

private Camera mCamera;//相机

private SurfacePreView mPreView;//视图

private FrameLayout mFrameLayout;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_camera_takephoto);

mFrameLayout = (FrameLayout) findViewById(R.id.framelayout);

if (checkCameraHardware(this)) {

mCamera = getCamera();

mPreView = new SurfacePreView(this, mCamera);

mFrameLayout.addView(mPreView);

}

}

/**

* 拍照对焦

* @param view

*/

public void takephoto(View view){

mCamera.autoFocus(new AutoFocusCallback() {

@Override

public void onAutoFocus(boolean success, Camera camera) {

mCamera.takePicture(null, null, mPicture);

}

});

}

/**

* 拍照后的图片保存

*/

private PictureCallback mPicture = new PictureCallback() {

@Override

public void onPictureTaken(byte[] data, Camera camera) {

try {

File file = new File("/sdcard/file/aa.jpg");

if (!file.exists()) {

file.mkdirs();

}

FileOutputStream fos = new FileOutputStream(file);

fos.write(data);

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

};

/**

* 判断照相机是否存在

* @param context

* @return

*/

private boolean checkCameraHardware(Context context){

if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {

return true;

}

return false;

}

/**

* 初始化照相机

* @return

*/

public static Camera getCamera(){

Camera camera = null;

try {

camera = Camera.open(0);

} catch (Exception e) {

e.printStackTrace();

}

return camera;

}

/**

* 实现拍照视图

*/

@SuppressWarnings("deprecation")

private class SurfacePreView extends SurfaceView implements SurfaceHolder.Callback{

private Camera mCamera;

private SurfaceHolder mHolder;

public SurfacePreView(Context context, Camera camera) {

super(context);

mCamera = camera;

mHolder = getHolder();

mHolder.addCallback(this);

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

try {

mCamera.setPreviewDisplay(mHolder);

mCamera.startPreview();

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

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

if (holder.getSurface() == null) {

return;

}

try {

mCamera.stopPreview();

mCamera.setPreviewDisplay(mHolder);

mCamera.startPreview();

} catch (IOException e) {

e.printStackTrace();

}

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

//

mCamera = null;

}

}

}

布局:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

android:id="@+id/framelayout"

android:layout_width="wrap_content"

android:layout_height="0dp"

android:layout_weight="1" >

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="takephoto"

android:text="拍照" />

希望本文所述对大家Android程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值