Java android摄像头在横向模式下伸展
我正在编写的应用程序需要摄像头功能。 因此,为了了解如何操作相机,我遵循以下脚本: 我已将活动放入清单中,在横向模式下为其设置屏幕方向 我遇到的问题是,当相机侧向放置(因此我将Galaxy Tab P1000置于横向位置)时,视图被拉伸 为了更具体地说明我的脚本,我使用了谷歌制作的代码的精确副本。可以在android sdk\samples\android-8\ApiDemos\src\com\example\android\api\graphics中找到它\ 该文件本身称为CameraPreview 我真的不知道为什么屏幕看起来这么长。当然,这种格式很奇怪,不是方形的,但当使用设备上安装的默认摄像头应用程序时,它一点也不变形。当我侧着相机并稍微移动相机时,相机会使图像变形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标签给一个物体拍照(本例中是笔记本电脑),然后用我的手机给我的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();