让自己开发的照相软件也可以自动对焦
拍照button按下时
mCamera.autoFocus(mAutoFocusCallBack);
自动对焦回调函数mAutoFocusCallBack
private AutoFocusCallback mAutoFocusCallBack = new AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {if (success) {mInProgress = true;// set parameters of cameraCamera.Parameters Parameters = mCamera.getParameters();Parameters.setPreviewSize(IMG_PREVIEW_WIDTH, IMG_PREVIEW_HEIGHT);Parameters.setPictureSize(IMG_WIDTH, IMG_HEIGHT);mCamera.setParameters(Parameters);mCamera.takePicture(mShutterListener, null, mImageCaptureCallback);}}};
设置Camera.Parameters好像有些问题,如果设置了相机(或者是SDK)不支持的分辨率就会报错,估计要添加判断。
目前的设置为
private static int IMG_PREVIEW_WIDTH = 480;private static int IMG_PREVIEW_HEIGHT = 320;private static int IMG_WIDTH = 1280;private static int IMG_HEIGHT = 960;
监听事件mShutterListener
private Camera.ShutterCallback mShutterListener = new Camera.ShutterCallback() {public void onShutter() {}};
拍照回调函数mImageCaptureCallback
这里使用了线程,因为考虑到保存图片时一般都会显示一个progress dialog,如果不用线程的话,dialog画面会定在那里,无法起到预期的效果。
当然不用线程也不会有错,适当修改一下就可以了。
private PictureCallback mImageCaptureCallback = new PictureCallback() {@Overridepublic void onPictureTaken(final byte[] data, Camera camera) {new Thread(new Runnable() {@Overridepublic void run() {// get path to save image fileString filePath = "/sdcard/DCIM/Camera";// generate file nameString name = "mytest.jpg";String fileName = filePath + name;FileOutputStream fos = null;try {// saving filefos = new FileOutputStream(fileName);fos.write(data);fos.close();} catch (Exception e) {// close file if errorif (fos != null) {try {fos.close();} catch (IOException e1) {e1.printStackTrace();}try {throw e;} catch (Exception e1) {e1.printStackTrace();}}// close scenefinish();}}}).start();}};
最后提醒一下,别忘记在AndroidManifest.xml里增加
<uses-permission android:name="android.permission.CAMERA" />
好了,就写那么多吧,希望对大家有用。 1 楼 liggway 2010-07-20 请教楼主Parameters.setPictureSize(IMG_WIDTH, IMG_HEIGHT);
该语句似乎没有起作用,也没有报错,其实就是想设置下分辨率的大小
另外Camera.Size做什么用的,又该怎么用呢? 2 楼 dai_lm 2010-07-20 感觉需要设置成摄像头支持的分辨率,如果相机不支持,即使设置了也不会起效。
Camera.Size,不知道,看SDK帮助,好像是设置图像大小的,非分辨率。