標籤:tty api raid text data int 調整 height 取圖
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.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中相機拍照