【问题标题】:Surfaceview using Mobile Vision Displays the Camera in Landscape使用 Mobile Vision 的 Surfaceview 以横向显示相机
【发布时间】:2016-07-12 22:56:17
【问题描述】:
我正在使用 SurfaceView 和 Google 的 Mobile Vision 库。对于许多设备来说,它看起来不错,但是当与 Nexus 7 等少数设备一起使用时,相机视图会进入横向模式。这使得扫描条形码等变得困难,因为它难以正确聚焦和定位。
在我探索过的 Vision 库中,没有任何方法可以让它们返回硬件摄像头,因此我们可以管理方向,例如如果摄像头视图返回横向,那么我们可以动态旋转视图以使其看起来像纵向。
所以想问一下 Nexus 7 等设备是否可以将相机或视图更改为纵向。
欢迎任何帮助!谢谢
【问题讨论】:
标签:
android
android-camera
barcode-scanner
android-vision
【解决方案1】:
许多选项卡的摄像头安装在旋转位置,因此当水平握持时,即使图像实际上比高度宽,照片也会被拍摄为“纵向”。
在我前段时间构建的一个应用程序上,我很难学会它。唯一的方法是检查屏幕方面与图像方面和图像旋转。
通过比较这些,您可以推断出相机图像是否旋转正确,或者是否需要后旋转 90 度。
【解决方案2】:
我找到了一个解决方案,让自己从这个人的回答中得到一个想法:
https://stackoverflow.com/a/41634379/5028531
所以我做了什么:
cameraPreview.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
try {
cameraSource.start(cameraPreview.getHolder());
Field[] declaredFields = CameraSource.class.getDeclaredFields();
for (Field field : declaredFields) {
if (field.getType() == Camera.class) {
field.setAccessible(true);
try {
Camera camera = (Camera) field.get(cameraSource);
if (camera != null) {
Camera.Parameters params= camera.getParameters();
camera.setDisplayOrientation(0);
}
} catch (IllegalAccessException | RuntimeException e) {
e.getMessage();
}
break;
}
}
} catch (IOException e) {
Log.e("CAMERA SOURCE", e.getMessage());
e.printStackTrace();
}
} else {
Log.w("CAMERA SOURCE", "Permission not granted");
Toast.makeText(getActivity(), "Camera permission denied", Toast.LENGTH_SHORT).show();
}
}