android 中相机预览的问题

发布于 2024-12-01 21:25:53 字数 1492 浏览 0 评论 0 原文

我有以下问题:我有一个应用程序,我正在使用 Android 设备的相机。 我已经构建了自己的相机。大问题是当预览开始时,所有图像看起来都调整了大小。每个对象看起来更长、更大......

surfaceChanged()方法中我已经这样做了:

List<Size> previews = p.getSupportedPreviewSizes();

我循环了这个 list previews 但我还没有找到更好的预览尺寸。 list previews 的大小等于 7,但其中的几个项目使我的图像看起来更好!

我的方法如下:

 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
            Log.e(TAG, "surfaceChanged");
            if (mPreviewRunning) {
                mCamera.stopPreview();
            }

            Camera.Parameters p = mCamera.getParameters();
            List<Size> sizes = p.getSupportedPictureSizes();
            List<Size> previews = p.getSupportedPreviewSizes();

            Size preview = previews.get(3);

    // the size of preview is 7 and looped each item....

         p.setPreviewSize(preview.width,preview.height);

         int f=p.getJpegQuality(); 
         Size   size = sizes.get(3);
         p.setJpegQuality(f);
         p.setPictureSize(size.width,size.height);

           mCamera.setParameters(p);
            try {
                mCamera.setPreviewDisplay(holder);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mCamera.startPreview();
            mPreviewRunning = true;
        }

有人知道吗?

I have the following problem:I have an app where I'm using the camera of the android device.
I have built my own camera.The BIG problem is that when the preview starts all the image looks resized.Every object looks longer, larger...

in surfaceChanged() method I've done this:

List<Size> previews = p.getSupportedPreviewSizes();

I looped this list previews but I haven't found a better size for my preview.
The list previews has the size equal to 7 but nne of this items make my image look better!!

Here is how my method looks like:

 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
            Log.e(TAG, "surfaceChanged");
            if (mPreviewRunning) {
                mCamera.stopPreview();
            }

            Camera.Parameters p = mCamera.getParameters();
            List<Size> sizes = p.getSupportedPictureSizes();
            List<Size> previews = p.getSupportedPreviewSizes();

            Size preview = previews.get(3);

    // the size of preview is 7 and looped each item....

         p.setPreviewSize(preview.width,preview.height);

         int f=p.getJpegQuality(); 
         Size   size = sizes.get(3);
         p.setJpegQuality(f);
         p.setPictureSize(size.width,size.height);

           mCamera.setParameters(p);
            try {
                mCamera.setPreviewDisplay(holder);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mCamera.startPreview();
            mPreviewRunning = true;
        }

Anyone any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怪异←思 2024-12-08 21:25:53

看一下 PreviewFrameLayout 类。它用于使用其必须具有的宽高比来显示 SurfaceView。

Take a look at the PreviewFrameLayout class from the default Camera app. It's used to display SurfaceView using the aspect ratio it must have.

假装爱人 2024-12-08 21:25:53

您需要保持纵横比。

如果您的设备支持,请尝试将预览尺寸设置为 640x480。这将保持 4:3 的纵横比。

如果您的开发设备不支持 640x480,请尝试将其设置为其他分辨率,以保持宽高比为 4:3。

您可以这样设置相机上的预览尺寸 -

 mCameraDevPara.setPreviewSize(PREVIEW_WIDTH, PREVIEW_HEIGHT);
 mCameraDev.setParameters(mCameraDevPara);

只有设置了预览尺寸后,您才能调用 API mCameraDev.setPreviewDisplay(mSurfaceHolder);mCameraDev.startPreview();

You need to maintain your aspect ratio.

Try setting your preview size to 640x480 if your device supports it. This will maintain an aspect ratio of 4:3.

If your dev doesn't support 640x480 try setting it to a different resolution which maintains an aspect ratio of 4:3.

You can set the preview size on the camera like this -

 mCameraDevPara.setPreviewSize(PREVIEW_WIDTH, PREVIEW_HEIGHT);
 mCameraDev.setParameters(mCameraDevPara);

Only after you set the preview size you can call the API mCameraDev.setPreviewDisplay(mSurfaceHolder); and mCameraDev.startPreview();

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文