android camera surfaceview 变形,使用Camera预览显示变形问题
本人使用Camera显示预览图竖屏显示会有一些拉伸。感觉被拉长了。
本人已经选择了最接近的比例了,但是还是有拉伸。
package com.example.zxing_android;
import java.io.IOException;
import java.util.List;
import com.example.zxing_android.R.color;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
/**
*/
public class CameraActivity extends Activity {
SurfaceView mSurface;
SurfaceHolder mSurfaceHolder;
Camera mCamera;
boolean isInit;
Button btn;
// int viewWidth, viewHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
mSurface = (SurfaceView) findViewById(R.id.camera);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCamera.autoFocus(null);// 自动对焦
}
});
mSurfaceHolder = mSurface.getHolder(); // get the camera holder
mSurfaceHolder.addCallback(new Callback() {
@Override
public void surfaceCreated(SurfaceHolder arg0) {
mCamera = Camera.open(); // open camera
isInit = false;
try {
mCamera.setPreviewDisplay(mSurfaceHolder); // set the //
} catch (IOException e) {
e.printStackTrace();
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
mCamera.startPreview(); // state preview
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// mSurface.setLayoutParams(new LayoutParams(viewWidth,
// viewHeight));
mCamera.setPreviewCallback(null); // !这个必须在前,不然退出出错
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
initCamera(width, height);
}
});
}
private void initCamera(int width, int height) {
if (!isInit) {
// viewWidth = width;
// viewHeight = height;
isInit = true;
mCamera.autoFocus(null);
Camera.Parameters parameters = mCamera.getParameters();
// 摄像头旋转
// if (android.os.Build.VERSION_CODES.GINGERBREAD >
// android.os.Build.VERSION.SDK_INT) {
mCamera.setDisplayOrientation(90);
// } else {
// parameters.set("rotation", 180);
// }
List previewSizes = mCamera.getParameters().getSupportedPreviewSizes();
double aspectTolerance = Double.MAX_VALUE;
int preWidth = 0, preHeight = 0;
double scale = ((double) width) / height;
for (int i = 0, len = previewSizes.size(); i
Size s = previewSizes.get(i);
double sizeScale = ((double) s.height) / s.width;
if (Math.abs(scale - sizeScale)
aspectTolerance = Math.abs(scale - sizeScale);
preWidth = s.height;
preHeight = s.width;
}
}
if (preWidth != 0) {
parameters.setPreviewSize(preWidth, preHeight);
// mSurface.setLayoutParams(new LayoutParams(720, 1280));
Size s = parameters.getPreviewSize();
Log.e("", s.width + " " + s.height);
}
}
}
}
解决方案
10
输出下getSupportedPreviewSizes的全部值。例如1080*720
假如你竖屏是用整个手机屏幕显示预览,那么手机的长宽比例和预览返回的相差太多了。拉伸应该是不可避免。
不想拉伸的话就缩小屏幕显示的范围吧。
90
引用:
应该先设置预览参数再打开预览图。
CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用Camera预览显示变形问题!
android camera surfaceview 变形,使用Camera预览显示变形问题相关推荐
- android预览界面显示不全,Android SurfaceView Camera 预览显示不全(画面拉伸)
释放双眼,带上耳机,听听看~! 项目当中遇到调整摄像头位置需要全屏显示摄像头预览界面,过程中发现预览界面存在无法显示全,画面被拉伸的问题.surfaceview的宽高比可能与camera设置的宽高比不 ...
- Android 自定义Camera(一)如何预览相机
Android Camera之如何预览相机 1.官方Api描述 翻译后为: 使用android.hardware.Camera拍照,请使用以下步骤: 1.从open(int)获取一个Camera实例. ...
- Android Camera2 教程 · 第三章 · 预览
Android Camera2 教程 · 第三章 · 预览 DarylGo关注 Android Camera 上一章<Camera2 开启相机>我们学习了如何开启和关闭相机,接下来我们来学 ...
- 谷歌发布 Android 8.1 首个开发者预览版,优化内存效率
今晨,谷歌推出了 Android 8.1 首个开发者预览版,此次升级涵盖了针对多个功能的提升优化,其中包含对 Android Go (设备运行内存小于等于 1 GB)和加速设备上对机器学习的全新神经网 ...
- android p dp5,谷歌释出Android P第5个开发者预览版更新!
原标题:谷歌释出Android P第5个开发者预览版更新! [PConline资讯]今天凌晨,谷歌正式推出了AndroidP的第五个开发者预览版(DP5),这标志着AndroidP终于准备好在2018 ...
- FileUpload控件实现单按钮图片自动上传并带预览显示
FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理: FileUpload控件默认不支持服务端的ONCHANGE事件,此时用一种变通的方法借用客户端的onchange事件,调用_ ...
- wps打印预览显示不全怎么解决?
我们在打印wps表格时,可能会遇到打印预览显示不全的情况,遇到这种情况要如何调整呢?下面就来看看具体的解决办法. 第一步:打开打印预览显示不全的wps表格,单击"打印预览"按钮. ...
- 微信小程序云开发上传图片无法预览显示
这是图片无法预览显示的情况,而且文件格式显示也不显示为图片格式 不要忘记要在起完名字后加上你希望的图片格式后缀名 加完之后就可以正常显示了
- plot绘图只能在工具栏的预览显示,无法全屏弹窗显示---matlab 不学无术小问题
背景:小白在使用他人源码时,对MATLAB中的函数不熟悉,运行成功后发现plot绘图无法直接弹窗显示,只能在工具栏的预览显示. 为了解决此问题对绘图部分所有函数都进行了仔细调试,终于发现问题出在set ...
最新文章
- 华师大数据科学考研_2020年华东师范大学行政管理专业考研报录比、参考书目、考研经验分享...
- SSH安装后提示sshd_server account 用户
- 从终端运行python程序
- linux shell less 命令---转
- python详细的安装教程分享!
- ORA-29786: SIHA attribute GET failed with error
- 0530JavaScript基础2
- [线性代数] 对网络上一篇讲解特征值分解的物理意义的文章的批注
- Kafka源码分析-序列3 -Producer -Java NIO(Reactor VS Peactor)
- iOS for 和 forin 的区别 以及注意事项
- SAP云解决方案和企业本地部署(On-Premise)混合架构下的安全认证权限管理
- Ubuntu 13.10 用sogou拼音替换ibus-转
- php socket 读网页,PHP webSocket实现网页
- 【霜雪千年】MMD动作镜头下载
- java免费翻译api接口_多语言翻译api
- c语言中sub指令,sub指令(汇编语言sub用法)
- DTIM间隔在组播和节电方面的综合考虑
- Beyond Compare 4 “授权秘钥已被吊销“ 的解决办法
- unity显示no camera rendering
- 配置软路由-同时连接内网和外网
热门文章
- Linux--自有服务
- received ((None, 2) vs (None, 5))
- 国产触控笔哪个牌子好,哪种电容笔更好用?
- 图像滤镜艺术---保留细节的磨皮之C#程序实现
- Android 多商品订单评价(类似淘宝)
- 游侠联机不了服务器未响应,仁王联机补丁跳出问题解决方法 仁王游戏停止未响应怎么办-游侠网...
- 通过adb命令启动Android程序
- 技术文档之起航--QoE有关
- 我的世界1.8.9无需正版的服务器,我的世界1.8.9正式版
- vue的移动端项目打包成手机的app软件apk格式