在不启用预览功能的情况下拍照,用后摄像头没有问题,而用前摄像头拍,老是不能回调PictureCallback,请指教,非常感谢!
public boolean TakePicture()
{
if(mCamera != null)
{
mCamera.release();
mCamera = null;
}
// int iID = 1;
// mCamera = Camera.open(1);
int cameraCount = 0;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras(); // get cameras number
for ( int camIdx = 0; camIdx < cameraCount;camIdx++ ) {
Camera.getCameraInfo( camIdx, cameraInfo ); // get camerainfo
if ( cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_FRONT ) {
// 代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置
try {
mCamera = Camera.open( camIdx );
} catch (RuntimeException e) {
e.printStackTrace();
}
}
}
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setPreviewSize(800, 480);
//parameters.setFocusMode("auto");
//parameters.set("jpeg-quality", 85);
parameters.setPictureSize(320, 240);
// List<Camera.Size> lSize = parameters.getSupportedPreviewSizes();
try{
mCamera.setParameters(parameters);
}
catch(Exception e){
e.printStackTrace();//setParameters failed
}
//启动摄像头取景
mCamera.startPreview();
SystemClock.sleep(3000);
if (mCamera != null) { //进行拍照
mCamera.takePicture(null, null, pictureCallback);
}
//停止摄像头取景
mCamera.stopPreview();
return true;
}
//拍完照后的回调函数
public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) { //从byte数组数据生成图像数据。
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
//释放摄像头
mCamera.release();
mCamera = null;
}
};
public boolean TakePicture()
{
if(mCamera != null)
{
mCamera.release();
mCamera = null;
}
// int iID = 1;
// mCamera = Camera.open(1);
int cameraCount = 0;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras(); // get cameras number
for ( int camIdx = 0; camIdx < cameraCount;camIdx++ ) {
Camera.getCameraInfo( camIdx, cameraInfo ); // get camerainfo
if ( cameraInfo.facing ==Camera.CameraInfo.CAMERA_FACING_FRONT ) {
// 代表摄像头的方位,目前有定义值两个分别为CAMERA_FACING_FRONT前置和CAMERA_FACING_BACK后置
try {
mCamera = Camera.open( camIdx );
} catch (RuntimeException e) {
e.printStackTrace();
}
}
}
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
//parameters.setPreviewSize(800, 480);
//parameters.setFocusMode("auto");
//parameters.set("jpeg-quality", 85);
parameters.setPictureSize(320, 240);
// List<Camera.Size> lSize = parameters.getSupportedPreviewSizes();
try{
mCamera.setParameters(parameters);
}
catch(Exception e){
e.printStackTrace();//setParameters failed
}
//启动摄像头取景
mCamera.startPreview();
SystemClock.sleep(3000);
if (mCamera != null) { //进行拍照
mCamera.takePicture(null, null, pictureCallback);
}
//停止摄像头取景
mCamera.stopPreview();
return true;
}
//拍完照后的回调函数
public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) { //从byte数组数据生成图像数据。
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
//释放摄像头
mCamera.release();
mCamera = null;
}
};
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货