CWAC-Camera,相机预览太小

时间:2015-07-03 07:17:40

标签: android camera preview commonsware-cwac cwac-camera

我是英语的废话,希望没关系。

我正在研究CWAC相机,有一个我不明白的问题。

我正在尝试使用CWAC相机拍摄照片,然后将其显示在“类似画廊”的活动中。 问题是,我的相机预览的“范围”(?)比我的画廊预览小。

我认为如果我给你看图片会更清楚:

相机预览:http://i.imgur.com/U7RAMo6.jpg(这是截图)

图库预览:http://i.imgur.com/jU5CAmG.jpg

我希望我的相机预览能够显示与我的图库预览完全相同的图像。我无法使其发挥作用。正如您所看到的,图库预览的范围更广,我希望这能用于我的相机预览。

我的软件正在使用getPreferredPreviewSize()。 我试图覆盖getPreviewSize()或getPreferredPreviewSizeForVideo(),但它不会改变任何东西。我想我不明白如何使用这些覆盖,即使文档和stackoverflow上的问题。

以下是 MainActivity 裁剪版本:

private CameraView mCameraView;

@Override
 public void onAttach(Activity activity) {
    super.onAttach(activity);
    MySingletonClass singleton = new MySingletonClass();

    Singleton.getInstance().setMySingletonClass(singleton);
    // We overrided the Camera Host so we can start the email activity in the saveImage() method
    MyCustomCameraHost myCustomCameraHost = new MyCustomCameraHost(activity, this, mIsSaving, mCameraView);
    this.setHost(myCustomCameraHost);
}
[...]
@Override
public void onDetach() {
    super.onDetach();
    mSensorManager.unregisterListener(this);
}
[...]
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_preview, container, false);
    view.setOnClickListener(this);

    mCameraView = (CameraView) view.findViewById(R.id.cameraSurfaceView);
    mCameraView.setHost(getHost());

    //Camera.open(getHost().getCameraId()).setOneShotPreviewCallback(this);
    mCameraView.setPreviewCallback(this);
    setCameraView(mCameraView);

    return view;
}

这是 CameraView布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@drawable/border"
android:layout_height="match_parent" >
[...]
<com.commonsware.cwac.camera.CameraView
    android:id="@+id/cameraSurfaceView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true" />
[...]
</RelativeLayout>

我的显示活动很简单:

mImageView.setImageBitmap(myBitmap);

我的手机的原始分辨率为1280 * 720,所以我认为这是相机预览所采用的比率。 拍摄的照片分辨率为3264 * 2448,所以当我在我的画廊中显示它时,它有黑色边框(我不介意)。

你能帮我解决相机预览的“范围”吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我的回答:

我凌驾于此:(SimpleCameraHost.java)

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public Camera.Size getPreferredPreviewSizeForVideo(int displayOrientation,
                                                 int width,
                                                 int height,
                                                 Camera.Parameters parameters,
                                                 Camera.Size deviceHint) {
List<Camera.Size> previewSizesList = parameters.getSupportedPreviewSizes();

for(int idx = 0; idx < previewSizesList.size(); idx++)
{
  Log.e("myDebug", "Height----------------- " + previewSizesList.get(idx).height);
  Log.e("myDebug", "Width----------------- " + previewSizesList.get(idx).width);
}

if (deviceHint != null) {
  return(previewSizesList.get(0));
  // return(deviceHint);
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
  //it goes through here
  return(previewSizesList.get(0));
  //return(parameters.getPreferredPreviewSizeForVideo());
}

return(null);
}

我选择了previewSizesList.get(0)(索引0)因为getSupportedPreviewSizes()提供的这个大小(960w,720h)的比例是1,33333,这与我可以拍摄的照片的比例相匹配(3264 / 2448 = 1,3333)。

你也可以在这里查看文档:{​​{3}}它具有相同的结果(在某些设备上),但不那么复杂。