特定设备上的 Cwac-Camera 输出文件大小问题
Cwac-Camera out file size issue on specific devices
我正在使用 CWAC - Camera library 将自定义相机集成到我的应用程序中。
除 Moto E 和 Moto G 外,它在我拥有的所有设备上都能正常工作。
当我使用上述设备拍摄单拍图像时,我没有得到所需尺寸的输出图像。
当我去拍摄单张图像时,getLargestPictureSize (CameraUtils) 方法 returns 相机支持的最大尺寸,如 1944*2592 (h*w) 和拍摄前在相机参数中设置的相同但输出文件是以 1280*720 (h*w) 生成。
谁能指导我解决可能的问题?
getLargestPictureSize 方法
public static Camera.Size getLargestPictureSize(CameraHost host,
Camera.Parameters parameters,
boolean enforceProfile) {
Camera.Size result=null;
for (Camera.Size size : parameters.getSupportedPictureSizes()) {
// android.util.Log.d("CWAC-Camera",
// String.format("%d x %d", size.width, size.height));
if (!enforceProfile
|| (size.height <= host.getDeviceProfile()
.getMaxPictureHeight() && size.height >= host.getDeviceProfile()
.getMinPictureHeight())) {
if (result == null) {
result=size;
}
else {
int resultArea=result.width * result.height;
int newArea=size.width * size.height;
if (newArea > resultArea) {
result=size;
}
}
}
}
if (result == null && enforceProfile) {
result=getLargestPictureSize(host, parameters, false);
}
return(result);
}
抓图方式
public void takePicture(final PictureTransaction xact) {
if (inPreview) {
if (isAutoFocusing) {
throw new IllegalStateException(
"Camera cannot take a picture while auto-focusing");
}
else {
previewParams=camera.getParameters();
Camera.Parameters pictureParams=camera.getParameters();
Camera.Size pictureSize=
xact.host.getPictureSize(xact, pictureParams);
pictureParams.setPictureSize(pictureSize.width,
pictureSize.height);
pictureParams.setPictureFormat(ImageFormat.JPEG);
// pictureParams.setColorEffect(Parameters.EFFECT_MONO);
if (xact.flashMode != null) {
pictureParams.setFlashMode(xact.flashMode);
}
if (!onOrientationChange.isEnabled()) {
setCameraPictureOrientation(pictureParams);
}
camera.setParameters(xact.host.adjustPictureParameters(xact,
pictureParams));
xact.cameraView=this;
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, final Camera camera) {
postDelayed(new Runnable() {
@Override
public void run() {
try {
camera.takePicture(
xact,
null,
new PictureTransactionCallback(xact));
} catch (Exception e) {
android.util.Log.e(getClass()
.getSimpleName(),
"Exception taking a picture", e);
// TODO get this out to library clients
}
}
}, xact.host.getDeviceProfile().getPictureDelay());
}
});
inPreview=false;
}
}
else {
throw new IllegalStateException(
"Preview mode must have started before you can take a picture");
}
}
我可以重现你的问题。大多数大小请求都会被忽略。我的猜测是该设备与其他一些设备一样,不喜欢我即时更改相机参数。我将用一个新的库替换 CWAC-Camera,它将停止这样做,并添加对 Android 5.0 的 android.hardware.camera2
API 的支持。希望到时候这个问题会得到解决。
我已经在现有库中为此提交了 an issue,所以我知道要专门处理这种情况。
我正在使用 CWAC - Camera library 将自定义相机集成到我的应用程序中。
除 Moto E 和 Moto G 外,它在我拥有的所有设备上都能正常工作。
当我使用上述设备拍摄单拍图像时,我没有得到所需尺寸的输出图像。
当我去拍摄单张图像时,getLargestPictureSize (CameraUtils) 方法 returns 相机支持的最大尺寸,如 1944*2592 (h*w) 和拍摄前在相机参数中设置的相同但输出文件是以 1280*720 (h*w) 生成。
谁能指导我解决可能的问题?
getLargestPictureSize 方法
public static Camera.Size getLargestPictureSize(CameraHost host,
Camera.Parameters parameters,
boolean enforceProfile) {
Camera.Size result=null;
for (Camera.Size size : parameters.getSupportedPictureSizes()) {
// android.util.Log.d("CWAC-Camera",
// String.format("%d x %d", size.width, size.height));
if (!enforceProfile
|| (size.height <= host.getDeviceProfile()
.getMaxPictureHeight() && size.height >= host.getDeviceProfile()
.getMinPictureHeight())) {
if (result == null) {
result=size;
}
else {
int resultArea=result.width * result.height;
int newArea=size.width * size.height;
if (newArea > resultArea) {
result=size;
}
}
}
}
if (result == null && enforceProfile) {
result=getLargestPictureSize(host, parameters, false);
}
return(result);
}
抓图方式
public void takePicture(final PictureTransaction xact) {
if (inPreview) {
if (isAutoFocusing) {
throw new IllegalStateException(
"Camera cannot take a picture while auto-focusing");
}
else {
previewParams=camera.getParameters();
Camera.Parameters pictureParams=camera.getParameters();
Camera.Size pictureSize=
xact.host.getPictureSize(xact, pictureParams);
pictureParams.setPictureSize(pictureSize.width,
pictureSize.height);
pictureParams.setPictureFormat(ImageFormat.JPEG);
// pictureParams.setColorEffect(Parameters.EFFECT_MONO);
if (xact.flashMode != null) {
pictureParams.setFlashMode(xact.flashMode);
}
if (!onOrientationChange.isEnabled()) {
setCameraPictureOrientation(pictureParams);
}
camera.setParameters(xact.host.adjustPictureParameters(xact,
pictureParams));
xact.cameraView=this;
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, final Camera camera) {
postDelayed(new Runnable() {
@Override
public void run() {
try {
camera.takePicture(
xact,
null,
new PictureTransactionCallback(xact));
} catch (Exception e) {
android.util.Log.e(getClass()
.getSimpleName(),
"Exception taking a picture", e);
// TODO get this out to library clients
}
}
}, xact.host.getDeviceProfile().getPictureDelay());
}
});
inPreview=false;
}
}
else {
throw new IllegalStateException(
"Preview mode must have started before you can take a picture");
}
}
我可以重现你的问题。大多数大小请求都会被忽略。我的猜测是该设备与其他一些设备一样,不喜欢我即时更改相机参数。我将用一个新的库替换 CWAC-Camera,它将停止这样做,并添加对 Android 5.0 的 android.hardware.camera2
API 的支持。希望到时候这个问题会得到解决。
我已经在现有库中为此提交了 an issue,所以我知道要专门处理这种情况。