Camera.Parameters parameters = mCamera01.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
Log.i(TAG, "pic is jpeg");
parameters.setPreviewSize(320, 240);
Log.i(TAG, "pic pingmu fenbianlv");
parameters.setPictureSize(1024, 768);
Log.i(TAG, "pic tupian fenbianlv");
mCamera01.setParameters(parameters);
mCamera01.setPreviewDisplay(mSurfaceHolder01);
mCamera01.startPreview();
初始化成功后就可以进行拍照了,拍照函数依然是通过调用camera类的函数来实现
mCamera01.takePicture
(shutterCallback, rawCallback, jpegCallback);
只需实现jpegCallback这个回调函数来就行解码、保存即可,前2个参数可以直接设为null,不过系统一般会自动帮你把这些都写进来的
private PictureCallback jpegCallback = new PictureCallback()
{
public void onPictureTaken(byte[] _data, Camera _camera)
{
// TODO Handle JPEG image data
Bitmap bm = BitmapFactory.decodeByteArray
(_data, 0, _data.length);
picname = "sdcard/1234566.jpg";//要保存在哪里,路径你自己设
File myCaptureFile = new File(picname);
try
{
BufferedOutputStream bos = new BufferedOutputStream
(new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
bos.flush();
bos.close();
//mImageView01.setImageBitmap(bm);
resetCamera();
}
catch (Exception e)
{
Log.e(TAG, e.getMessage());
}
}
};
拍照完了要重置照相机,然后可以继续拍照
private void resetCamera()
{
if (mCamera01 != null && bIfPreview)
{
mCamera01.stopPreview();
mCamera01.release();
mCamera01 = null;
bIfPreview = false;
}
}
2种拍照方式的比较
1.调用系统自带的照相机,照片格式大小只有几种选择,照片拍出来比较大,而自己程序实现的话可以调节照片大小为任意尺寸,图片的容量可以调节
2.调用系统的简单,而且外观一般比自己设置的要好看
3.调用系统的操作简单、方便,不易出错,自己编程的话需要注意,容易引起系统出错意外终止。