java - 安卓相机在横向模式下拉伸(stretch)

标签 java android camera landscape stretched

我正在编写的应用程序需要相机功能。 所以为了学习如何操作相机,我按照这个脚本:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

我已将 Activity 放入 list 中,将其屏幕方向设置为横向模式。

我遇到的问题是,当相机横放时(所以我将 Galaxy Tab P1000 保持在横向位置), View 被拉伸(stretch)了。

为了更具体地了解我的脚本,我使用了 Google 制作的代码的精确副本。可以在 android-sdk\samples\android-8\ApiDemos\src\com\example\android\apis\graphics\中找到

文件本身称为 CameraPreview。

我真的不知道为什么屏幕看起来如此拉长。当然,格式很奇怪,不是方形的,但是,当使用设备上安装的默认相机应用程序时,它根本不会变形。当我把它拿在一边并稍微移动相机时,这个相机会使图像变形。

enter image description here

enter image description here

我所做的是:我拿着我的 Galaxy 选项卡为一个物体(在这种情况下是笔记本电脑)拍照,然后用我的 Galaxy 手机拍照。在 Galaxy 上,我在我正在制作的应用程序中打开了相机屏幕。这对两个图像都很重要。一个我侧身握着,一个我在纵向 View 中握着。照片有点不清楚,但你可以看到在风景照片中,相机变得非常宽。

最佳答案

我昨天遇到了同样的问题。在研究了“相机”来源后,我发现了相机预览被拉伸(stretch)的原因。

原因是:SurfaceView 纵横比(宽/高)必须与预览参数中使用的 Camera.Size 纵横比相同。如果纵横比不一样,你就会得到拉伸(stretch)的图像。

因此,最快的解决方法是将 SurfaceView 的大小设置为 320px x 240px - Parameters.getSupportedPreviewSizes() 中支持的最小大小。

另外,您可以查看 Camera 标准应用程序源,它使用自定义布局来控制 SurfaceView 大小(参见 PreviewFrameLayout.java,onMeasure() 函数)。

使用

git 克隆 https://android.googlesource.com/platform/packages/apps/Camera.git

获取相机来源。

关于java - 安卓相机在横向模式下拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7580887/

相关文章:

java - 方法 setView 已弃用

android - 如何在 Android 中禁用 WIFI 自动连接

ios - Sample Buffer Delegate Swift 2 用于实时视频过滤器

android - 如何使用OpenCV处理自定义相机拍摄的照片

android - 如何同时编译Android 4.1/4.2相机+图库应用

java - 如何在Java中将bigDecimal数据保存到文件中

java - Servlet 的 Spring root WebApplicationContext

java - 如何忽略 quarkus 测试

Android 使用图像作为 ListView 的背景?

java.io.IOException : grpc failed