千金一刻莫空度,老大无成空自伤。这篇文章主要讲述Android中相机拍照相关的知识,希望能为你提供帮助。
android中调用系统相机的api接口在android.hardware包中。包里面类主要用到了Camera类。该类里面包含几个内部类:Camera.Parameters、Camera.CameraInfo、Camera.PictureCallback。
Camera.Parameters是通过Camera.Parameters parameters = mCamera.getParameters()获取,主要用来设置相机的一些參数,包含图片的格式、是否开启闪光灯等。
Camera.CameraInfo是通过CameraInfo info = new CameraInfo();
Camera.getCameraInfo(0, info)获取,主要用来获取相机的參数,包含方向等。
Camera.PictureCallback是直接new Camera.PictureCallback()然后实现里面的回调方法,public void onPictureTaken(byte[] data, Camera camera)将byte[]转换为bitmap。
相机的调用是先int
mCameraId = Camera.getNumberOfCameras() - 1,
Camera.open(mCameraId)。依据CameraInfo调整相机方向等。然后点击拍照后调用设置Camera.Parameters。mCamera.takePicture(null, null, pictureCallBack);最后在Camera.PictureCallback里获取图片。
【Android中相机拍照】
在调用系统相机时还须要用到android.view包里的用于显示图像的类,SurfaceView、SurfaceHolder、SurfaceHolder.Callback。
通过mSurfaceViewPicture = new SurfaceView(context), 在打开相机之后调用
mSurfaceHolder = mSurfaceViewPicture.getHolder();
mSurfaceHolder.addCallback(mCallback);
// 设置类型
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mPictureView.addView(mSurfaceViewPicture);
//mPictureView是FrameLayout用于显示图形的。
private Callback mCallback = new Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
} catch (IOException e) {
LogUtils.e(TAG, ""+e.getMessage());
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if (mCamera != null) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
}
};
推荐阅读
- Android资源推荐
- 原创源码角度分析Android的消息机制系列——ThreadLocal的工作原理
- Android里使用正則表達式
- Android动态添加和移除布局
- android.os.NetworkOnMainThreadException
- Android页面事件挂接模拟
- 原创源码角度分析Android的消息机制系列——ThreadLocal的工作过程
- android:Activity启动模式之singleTask
- Android五天乐(第三天)ListFragment与ViewPager