实际上我现在在我的应用程序中面临两个问题。
1) 使用前置摄像头时出现 RuntimeException。
2)使用后置摄像头捕获图像的方向取决于设备,这意味着在某些设备中我得到了完美的方向,但在某些设备中没有。
根据网站规则,我不应该在一个问题中问两个问题,但问题的根源在两个问题中是相同的, setParameters
所以我在一个问题中问。
代码:
负责抓图。
public void TakeImage(){
// try {
Camera.Parameters param;
param = mCamera.getParameters();
param.setRotation(90);
Camera.Size bestSize = null;
List<Camera.Size> sizeList = mCamera.getParameters().getSupportedPreviewSizes();
bestSize = sizeList.get(0);
for (int i = 1; i < sizeList.size(); i++) {
if ((sizeList.get(i).width * sizeList.get(i).height) > (bestSize.width * bestSize.height)) {
bestSize = sizeList.get(i);
}
}
List<Integer> supportedPreviewFormats = param.getSupportedPreviewFormats();
Iterator<Integer> supportedPreviewFormatsIterator = supportedPreviewFormats.iterator();
while (supportedPreviewFormatsIterator.hasNext()) {
Integer previewFormat = supportedPreviewFormatsIterator.next();
if (previewFormat == ImageFormat.YV12) {
param.setPreviewFormat(previewFormat);
}
}
param.setPreviewSize(bestSize.width, bestSize.height);
param.setPictureSize(bestSize.width, bestSize.height);
mCamera.setParameters(param);
mCamera.takePicture(null, null, mPicture);
// }
// catch (Exception e){
// Toast.makeText(getApplicationContext(),"camera capture exception",Toast.LENGTH_SHORT).show();
// }
}
使用前置摄像头时的 LogCate 异常:
2019-04-19 10:49:14.054 20679-20679/com.example.clapdetection E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.clapdetection, PID: 20679
java.lang.RuntimeException: setParameters failed
at android.hardware.Camera.native_setParameters(Native Method)
at android.hardware.Camera.setParameters(Camera.java:1980)
at com.example.clapdetection.Activity.CameraActivity.TakeImage(CameraActivity.java:465)
at com.example.clapdetection.Activity.CameraActivity$1$1.onClick(CameraActivity.java:110)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22433)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6126)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)