Android拍摄的照片尺寸无效

时间:2014-08-25 15:50:41

标签: android camera

我无法弄清楚为什么当我使用Android相机API拍摄照片时,拍摄的照片与预览不匹配。

对于预览,我使用的FrameLayout大小为817 x 770像素。 对于前置摄像头,我选择了1280 x 768像素的预览尺寸。 由于我想要一个覆盖整个预览区域的相机预览,我设置了一个大小为1283 x 770像素的FrameLayout(保持支持的预览帧的宽高比),其中心位于其父级(817 x 770 FrameLayout) :

D/TEST    (29556): View hierarchy (x/y/w/h):
D/TEST    (29556):  1050/168/817/770    android.widget.FrameLayout (the parent)
D/TEST    (29556):      0/0/1283/770    android.widget.FrameLayout
D/TEST    (29556):          0/0/-1/-1   com.example.cameratest.MainActivity$CameraPreview

所以我希望预览有点被切断,但肯定是居中的。 事实并非如此。当我拍摄照片时,我可以清楚地看到预览中间的内容不在拍摄照片的中间:original-full-size.bmp

对于此示例,笔的末端位于预览区域的左上角和右下角。而在拍摄的照片中他们不是。左边有一个巨大的左边距,右边有一个较小的边距。

我可以在此处找到用于重现行为的代码(带有一些硬编码值的较大部分的摘录):CameraTest.zip

问题是我无法假设预览区域与支持的相机预览尺寸的比例相匹配,并且我不想要有空白区域。我选择放弃一块预览区域。用户并不关心双方都丢失30px :)但我无法找到预览在整个画面中如此奇怪的原因。

代码在Nexus 7(2013)上运行。

我的活动布局是这样的:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${packageName}.${activityClass}">

    <FrameLayout
        android:id="@+id/rootView"
        android:layout_width="817px"
        android:layout_height="770px"
        android:layout_marginLeft="1050px"
        android:layout_marginTop="168px"
        android:background="#770000" />
    </FrameLayout>
</FrameLayout>

现在为了保持宽高比,我添加了另一个FrameLayout(视图层次结构转储中的第二个,1283 x 770像素)。而CameraPreview是一个简单的SurfaceView

FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(width, height);
layoutParams.gravity = Gravity.CENTER;
FrameLayout previewHolder = new FrameLayout(this);
previewHolder.setLayoutParams(layoutParams);

FrameLayout rootView = (FrameLayout)findViewById(R.id.rootView);
rootView.addView(previewHolder);

ViewGroup.LayoutParams paramsRoot = rootView.getLayoutParams();
Log.d("TEST", "Root: " + paramsRoot.width + " x " + paramsRoot.height);
Log.d("TEST", "Preview: " + width + " x " + height);

previewHolder.addView(cameraPreview);

如果previewHolder界限超出屏幕范围,则会出现问题。如果我将预览区域向左移动更多,那么左边距和右边距大于或等于(1283 - 817)/ 2,那么它看起来很好。

0 个答案:

没有答案
相关问题