Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android摄像头在横向模式下伸展_Java_Android_Camera_Landscape_Stretched - Fatal编程技术网

Java android摄像头在横向模式下伸展

Java android摄像头在横向模式下伸展,java,android,camera,landscape,stretched,Java,Android,Camera,Landscape,Stretched,我正在编写的应用程序需要摄像头功能。 因此,为了了解如何操作相机,我遵循以下脚本: 我已将活动放入清单中,在横向模式下为其设置屏幕方向 我遇到的问题是,当相机侧向放置(因此我将Galaxy Tab P1000置于横向位置)时,视图被拉伸 为了更具体地说明我的脚本,我使用了谷歌制作的代码的精确副本。可以在android sdk\samples\android-8\ApiDemos\src\com\example\android\api\graphics中找到它\ 该文件本身称为CameraPre

我正在编写的应用程序需要摄像头功能。 因此,为了了解如何操作相机,我遵循以下脚本:

我已将活动放入清单中,在横向模式下为其设置屏幕方向

我遇到的问题是,当相机侧向放置(因此我将Galaxy Tab P1000置于横向位置)时,视图被拉伸

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

该文件本身称为CameraPreview

我真的不知道为什么屏幕看起来这么长。当然,这种格式很奇怪,不是方形的,但当使用设备上安装的默认摄像头应用程序时,它一点也不变形。当我侧着相机并稍微移动相机时,相机会使图像变形


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

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

原因是:SurfaceView纵横比(宽度/高度)必须与摄影机相同。预览参数中使用的大小纵横比。如果纵横比不一样,则得到拉伸图像

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

此外,您还可以查看相机标准应用程序源代码,它使用自定义布局控制SurfaceView大小(请参见PreviewFrameLayout.java,onMeasure()函数)

使用

git克隆

获取相机源

public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub

        try {
            camera = Camera.open();

            camera.setDisplayOrientation(90);
            camera.setPreviewDisplay(holder);
            Camera.Parameters parameters = camera.getParameters();
            List<Size> sizes = parameters.getSupportedPictureSizes();
            parameters.setPictureSize(sizes.get(0).width, sizes.get(0).height); // mac dinh solution 0
            parameters.set("orientation","portrait");
            //parameters.setPreviewSize(viewWidth, viewHeight);
            List<Size> size = parameters.getSupportedPreviewSizes();
            parameters.setPreviewSize(size.get(0).width, size.get(0).height);
            camera.setParameters(parameters);
            camera.startPreview();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

我希望这对你有帮助。

T那么我是世界上唯一一个有这个问题的人吗?我也经历了这个问题…这个问题是一个隐藏的宝石!我很难找到这个。使用了谷歌的所有关键词。这个问题救了我的命。+1用于描述实际问题。您可以在surfaceChanged中找到SurfaceView的高度和宽度,然后在Camera parameters对象上使用getSupportedPreviewSizes查找最接近的匹配项,并将SurfaceView设置为所需的可接受大小。我这样做,但不起作用。私有Camera.Size getBestPreviewSize(int-width,int-height,Camera.Parameters参数){Camera.Size结果=null;for(Camera.Size-Size:Parameters.getSupportedPreviewSizes()){if(size.width您的代码只是在搜索适合初始宽度和高度的最大预览大小。当然,您在拉伸屏幕时会遇到问题,因为最大并不意味着“最佳纵横比”。您需要将预览视图大小调整为“最大”大小,通过调整其宽度或高度,使初始值(宽度、高度)和最终值(result.width、result.height)的比值=宽度/高度相同
List<Size> size = parameters.getSupportedPreviewSizes();
            parameters.setPreviewSize(size.get(0).width, size.get(0).height);
            camera.setParameters(parameters); 



camera.startPreview();