相机预览的时候变形。

dai_jiawei 2015-06-13 11:22:17
因为我的相机预览界面并不是全屏显示的,仅仅是在我指定大小的surfaceView中显示,所以导致了相机预览界面变形,请问要怎么改?
...全文
420 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdsm石 2015-08-21
  • 打赏
  • 举报
回复
请问下楼主最后是怎么解决这个问题的啊,我也遇到了这个问题,不知道咋解决了
只为搞笑 2015-07-03
  • 打赏
  • 举报
回复
其实在ZXing的demo里已经给出了这样一个寻找最优尺寸的方法,楼主拿去改一下就能满足自己的需求的
只为搞笑 2015-07-03
  • 打赏
  • 举报
回复
private Point findBestPreviewSizeValue(Camera.Parameters parameters, Point screenResolution) { List<Camera.Size> rawSupportedSizes = parameters.getSupportedPreviewSizes(); if (rawSupportedSizes == null) { Log.w(TAG, "Device returned no supported preview sizes; using default"); Camera.Size defaultSize = parameters.getPreviewSize(); return new Point(defaultSize.width, defaultSize.height); } // Sort by size, descending List<Camera.Size> supportedPreviewSizes = new ArrayList<>(rawSupportedSizes); Collections.sort(supportedPreviewSizes, new Comparator<Camera.Size>() { @Override public int compare(Camera.Size a, Camera.Size b) { int aPixels = a.height * a.width; int bPixels = b.height * b.width; if (bPixels < aPixels) { return -1; } if (bPixels > aPixels) { return 1; } return 0; } }); if (Log.isLoggable(TAG, Log.INFO)) { StringBuilder previewSizesString = new StringBuilder(); for (Camera.Size supportedPreviewSize : supportedPreviewSizes) { previewSizesString.append(supportedPreviewSize.width).append('x') .append(supportedPreviewSize.height).append(' '); } Log.i(TAG, "Supported preview sizes: " + previewSizesString); } double screenAspectRatio = (double) screenResolution.x / (double) screenResolution.y; // Remove sizes that are unsuitable Iterator<Camera.Size> it = supportedPreviewSizes.iterator(); while (it.hasNext()) { Camera.Size supportedPreviewSize = it.next(); int realWidth = supportedPreviewSize.width; int realHeight = supportedPreviewSize.height; if (realWidth * realHeight < MIN_PREVIEW_PIXELS) { it.remove(); continue; } boolean isCandidatePortrait = realWidth < realHeight; int maybeFlippedWidth = isCandidatePortrait ? realHeight : realWidth; int maybeFlippedHeight = isCandidatePortrait ? realWidth : realHeight; double aspectRatio = (double) maybeFlippedWidth / (double) maybeFlippedHeight; double distortion = Math.abs(aspectRatio - screenAspectRatio); if (distortion > MAX_ASPECT_DISTORTION) { it.remove(); continue; } if (maybeFlippedWidth == screenResolution.x && maybeFlippedHeight == screenResolution.y) { Point exactPoint = new Point(realWidth, realHeight); Log.i(TAG, "Found preview size exactly matching screen size: " + exactPoint); return exactPoint; } } // If no exact match, use largest preview size. This was not a great idea on older devices because // of the additional computation needed. We're likely to get here on newer Android 4+ devices, where // the CPU is much more powerful. if (!supportedPreviewSizes.isEmpty()) { Camera.Size largestPreview = supportedPreviewSizes.get(0); Point largestSize = new Point(largestPreview.width, largestPreview.height); Log.i(TAG, "Using largest suitable preview size: " + largestSize); return largestSize; } // If there is nothing at all suitable, return current preview size Camera.Size defaultPreview = parameters.getPreviewSize(); Point defaultSize = new Point(defaultPreview.width, defaultPreview.height); Log.i(TAG, "No suitable preview sizes, using default: " + defaultSize); return defaultSize; }
dai_jiawei 2015-07-02
  • 打赏
  • 举报
回复
引用 8 楼 x13945 的回复:
一般摄像头支持的分辨率只有固定的几种。 所以,针对你这种情况,SurfaceView的宽高可以看作已经固定,只能使用Matrix对预览画面进行裁剪,达到不变形到目的
你好。能简单给出几句代码吗?实在是不懂。走投无路了。
dai_jiawei 2015-06-18
  • 打赏
  • 举报
回复
引用 5 楼 dalor 的回复:
[quote=引用 4 楼 dai_jiawei 的回复:] [quote=引用 3 楼 dalor 的回复:] 获得相机预览时的图片比例,再对surfaceView中的预览进行等比例显示。 初始化camera的时候给其设置好相同比例的预览图尺寸和实际图的尺寸,并且设置你的SurfaceView的尺寸比例相同就行了。
我SurfaceView的高是设定死的。205dp.然后宽是取屏幕宽,但是我如果用parameter.setPreviewSize(screenWidth,205);的话。程序会报错。网上查了下好像setPreviewSize()里面是需要填入固定的值。[/quote] 你这里的screenWidth是计算后的值,不也是个固定值吗? 觉得还应该是你代码设置的问题。[/quote] 啊。。我没表述清楚。 不是说里面的值不能写死。 是说填入的宽高比是有几组固定值的。比如我填入800,480这样就行。
hn_刘潇 2015-06-18
  • 打赏
  • 举报
回复
一般摄像头支持的分辨率只有固定的几种。 所以,针对你这种情况,SurfaceView的宽高可以看作已经固定,只能使用Matrix对预览画面进行裁剪,达到不变形到目的
oooooooi 2015-06-17
  • 打赏
  • 举报
回复
在加载SurfaceView的时候,可以代码里面设置SurfaceView的setLayoutParams(new LayoutParams(width, height));,自己给他设置大小
开发者_android 2015-06-17
  • 打赏
  • 举报
回复
引用 4 楼 dai_jiawei 的回复:
[quote=引用 3 楼 dalor 的回复:] 获得相机预览时的图片比例,再对surfaceView中的预览进行等比例显示。 初始化camera的时候给其设置好相同比例的预览图尺寸和实际图的尺寸,并且设置你的SurfaceView的尺寸比例相同就行了。
我SurfaceView的高是设定死的。205dp.然后宽是取屏幕宽,但是我如果用parameter.setPreviewSize(screenWidth,205);的话。程序会报错。网上查了下好像setPreviewSize()里面是需要填入固定的值。[/quote] 你这里的screenWidth是计算后的值,不也是个固定值吗? 觉得还应该是你代码设置的问题。
dai_jiawei 2015-06-17
  • 打赏
  • 举报
回复
引用 3 楼 dalor 的回复:
获得相机预览时的图片比例,再对surfaceView中的预览进行等比例显示。 初始化camera的时候给其设置好相同比例的预览图尺寸和实际图的尺寸,并且设置你的SurfaceView的尺寸比例相同就行了。
我SurfaceView的高是设定死的。205dp.然后宽是取屏幕宽,但是我如果用parameter.setPreviewSize(screenWidth,205);的话。程序会报错。网上查了下好像setPreviewSize()里面是需要填入固定的值。
开发者_android 2015-06-14
  • 打赏
  • 举报
回复
获得相机预览时的图片比例,再对surfaceView中的预览进行等比例显示。 初始化camera的时候给其设置好相同比例的预览图尺寸和实际图的尺寸,并且设置你的SurfaceView的尺寸比例相同就行了。
dai_jiawei 2015-06-14
  • 打赏
  • 举报
回复
顶一个。哪位大神帮我下。
dai_jiawei 2015-06-13
  • 打赏
  • 举报
回复
附上图片
Android Camera开发入门:目录 第一篇: 前景  一、Android Camera开发前景;      1)camera相关应用的领域      2)相关岗位介绍;      3)市场招聘介绍;      4)发展前景介绍;  二、学习这门课的重要性;      1)适合的人群;      2)熟悉和了解Android Camera 应用开发流程的重要性 第二篇: 开发环境安装  一、jdk、sdk的配置;  二、android studio的安装介绍;  三、adb命令的使用; 第三篇: Camera 常用api和最新框架介绍  一、android camera api介绍      1)camera1、camera2 区别;      2)camera 1、camera2 常用api介绍;      3)android camerax;  二、android camera最新框架介绍 第四篇:Camera api1实现预览、拍照、录像功能  一、预览  二、拍照  三、录像  四、获取实时预览流 第五篇: Camera2相机 打开功能实现第六篇: Camera2相机 预览功能实现  1)surfaceview、textureview 第七篇: Camera2相机 拍照功能实现 1)单拍; 第八篇:Camera2相机 录像功能实现1)正常录像 第九篇:Camera2预览方向、拍照方向设置     1) 预览变形问题如何处理? 第十篇:YUV流处理  1)如何获取实时预览流?  2)  思考:双码流方案如何实现?一边本地录像,一边后台推流 第十一篇:dumpsys media.camera 第十二篇:Camera2 Zoom变焦第十三篇:人脸识别(android 原生 & 三方人脸识别算法)第十四篇:Uvc UsbCamera第十五篇:Android Camera2拍摄RAW图第十六篇: Android Camera2同时打开前后摄 并 录像第十七篇: Android Camera2 视频慢动作  附:1)提供android开发相关资源      软件工具、Android相关学习书籍、学习相关网站博客等链接2)提供课程讲解中设计到的App 源码    * Camera API1使用源码    * Camera API2使用源码    * 调用三方算法人脸识别源码    *  录像慢动作源码    * Uvc UsbCamera相关源码3)课件

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧