我正在使用(Android派)AOSP相机2应用程序。(
我们使用的是OV5640摄像头模块。能够在反向横向模式下预览和捕获图像和视频(但启用镜像)。但对于机械外壳配件,摄像头传感器模块在物理上向右旋转90度。在用于预览的摄像头应用程序中,图像将以90度左移的方式出现,同时启用了镜像功能。即使在拍摄完图像或视频后,也会有同样的行为。
请你建议我在相机应用程序(包/应用程序/相机2)中需要做什么更改:反向Landscpe和相机传感器模块旋转到90度右
我试着如下所示,这次相机图像捕获预览和相机方向相同,但预览尺寸更小。并且在拍摄完图像后,图像也保存在正确的方向上。仍然存在镜像问题。
但是视频预览仍然是90度左右旋转,但是在拍摄视频后,保存的视频正在正常播放。仍然存在镜像问题。
软件包/apps/Camera2/src/com/android/camera/app/OrientationManager。JAVA
public static DeviceOrientation from(int degrees) {
switch (degrees) {
case 0:
return CLOCKWISE_90;
case 90:
return CLOCKWISE_0;
case 180:
return CLOCKWISE_270;
case 270:
return CLOCKWISE_180;
default:
return CLOCKWISE_90;
}
}
软件包/应用程序/相机2/src/com/android/相机/处理/ImageBackend/TaskCompressImageToJpeg.java
final DeviceOrientation exifDerivedRotation;
if (exifOrientation == null) {
// No existing rotation value is assumed to be 0
// rotation.
exifDerivedRotation = DeviceOrientation.CLOCKWISE_90;
} else {
//exifDerivedRotation = DeviceOrientation
// .from(exifOrientation);
exifDerivedRotation = DeviceOrientation.CLOCKWISE_90;
}
// Resulting image will be rotated so that viewers won't
// have to rotate. That's why the resulting image will have 0
// rotation.
resultImage = new TaskImage(
DeviceOrientation.CLOCKWISE_90, resultSize.getWidth(),
resultSize.getHeight(),
ImageFormat.JPEG, null);
// Image rotation is already encoded into the bytes.
src/com/android/camera/textureviewheelper。JAVA
// This rotation code assumes that the aspect ratio of the content
// (not of necessarily the surface) equals the aspect ratio of view that is receiving
// the preview. So, a 4:3 surface that contains 16:9 data will look correct as
// long as the view is also 16:9.
switch (deviceOrientation) {
case CLOCKWISE_90:
transform.setRectToRect(rotatedRect, desiredBounds, Matrix.ScaleToFit.FILL);
transform.preRotate(270, mWidth / 2, mHeight / 2);
break;
case CLOCKWISE_180:
transform.setRectToRect(normalRect, desiredBounds, Matrix.ScaleToFit.FILL);
transform.preRotate(180, mWidth / 2, mHeight / 2);
break;
case CLOCKWISE_270:
transform.setRectToRect(rotatedRect, desiredBounds, Matrix.ScaleToFit.FILL);
transform.preRotate(90, mWidth / 2, mHeight / 2);
break;
case CLOCKWISE_0:
default:
transform.setRectToRect(normalRect, desiredBounds, Matrix.ScaleToFit.FILL);
break;
谢谢和问候,德文德拉
您是否从HAL的相机元数据返回了正确的传感器方向值?此外,AndroidCDD中有一个普遍要求,即传感器的长边必须与屏幕的长边对齐,大多数应用程序都希望这是真的。
Android操作系统还可以从前置摄像头翻转图像进行预览,但对于静态拍摄或录制的视频,不应这样做。如果这是一个后向摄像头,并且您正在从传感器模块生成镜像图像,则需要在HAL或硬件级别取消镜像。
一般来说,应用程序无法旋转/翻转绘制到SurfaceView中的图像,因此在应用程序中无法解决这一问题。如果你在应用程序中修复它,所有3P应用程序仍然会被破坏。当然,如果该设备不打算运行其他应用程序,或者被认证为与Android兼容,这可能无关紧要。
问题内容: 在我的相机应用中,您可以在前后相机之间切换。当我使用后置摄像头拍照时,照片与预览显示的一样。但是当我切换到前置摄像头时,图片是镜像的。我认为这与前置摄像头和后置摄像头处于横向模式有关。我已经尝试了几乎所有给定的答案。 如果有人可以向我指出正确的方向,那将真的有帮助。 问题答案: 我找到了答案,这样做没有帮助。我必须镜像生成的位图才能获得所需的结果。我使用Matrix方法来实现这一目标。
我是新来发帖的,所以请友善些!我已经研究了几乎所有其他与此相关的问题,并尝试了大多数,但我完全感到沮丧。我只想让我的Android手机以纵向模式显示摄像头,而不是横向模式。我只是修改opencv提供的ImageManipulations示例。 我使用的是opencv 3.01、Android sdk版本23、Android Studio 2.0和Android版本6.0.1的Nexus 5手机。这
我的应用程序使用intent拍照。如果我按肖像方向拍摄,我会得到图像。但当我旋转我的设备,并采取横向方向,我得到了错误。甚至错误消息指向(可能)错误的行。 打开相机: 关于活动结果: 给出解释的结果。然后我用其他代码再试一次<打开摄像机: 关于活动结果: 仍然有相同的结果<在寻找一些解决方案后,他们谈到了保存实例。然后我把这个(我使用片段) 仍未工作,其中一条错误消息指向 在onCreate(Bu
我已经建立了一个自定义的相机应用程序。面对屏幕方向的问题,我不希望在方向改变时重新创建活动。请用完整的解决方案帮助我。 在预览类中的surfaceChanged方法内获取空指针异常。 获取以下行中的空指针异常: 任何帮助将不胜感激。 以下是错误日志: 12-23 16:07:34.962 8845-8845/com。清晰摄像机E/AndroidRuntime﹕ 致命异常:主进程:com。清晰摄像头
表情测试 图片转文字 相框 拍摄图片
摄像头用于采集图像和影像信息,通过模块间的组合完成各种创意活动。 净重量:8.1g 体积:24×24×22mm 参数 分辨率:1280×720 像素大小:3.4um×3.4um 最大图像传输速率:全尺寸 @ 30fps 视场角:100° 镜片结构:4G+IR 焦比:2.97 有效焦距:2.4mm 功耗:100uA(待机)~240mW(工作) 电源:USB总线电源 抗跌落能力:1m 工作温度:-30