解决自定义相机分辨率适配、扭曲的问题

摘要:
公共void initFromCameraParameters(Cameracamera){Camera.Parametersparameters=Camera.getParameters();WindowManagermanager=(WindowManager)context.getSystemService(context.WINDOW_SERVICE);

在自定义相机和扫码的时候,如果不设置相机的默认分辨率,有可能导致相机用的是最小的分辨率,照出来的照片很模糊。

所以自定义相机的时候,需要获取屏幕分辨率,相机的预览分辨率,进行最佳的匹配。

由于相机的预览分辨率几乎都是 按照横屏的来描述的,eg 1920*1080

而手机一般是竖屏的,如果自定义的相机是竖屏的,匹配相机预览分辨率的时候,如果直接传入当前的屏幕宽高是,匹配不到最佳的分辨率的

如果有虚拟键盘,就更匹配不到,最后就会取一个相机的最大预览分辨率,但是这个并不一定是最佳匹配的,有可能屏幕是9:16的,而这个最大分辨率是4:3的,这个时候预览的时候就会变形,图像发生扭曲。

为了达到最佳匹配,我们可以针对竖屏的时候,进行宽高转换,用来适配最佳分辨率,这里的宽高应该拿手机屏幕的实际宽高,而不是显示宽高,有虚拟键盘的时候,显示高度比实际高度小

public void initFromCameraParameters(Camera camera) {
Camera.Parameters parameters = camera.getParameters();
WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();

if(Build.VERSION.SDK_INT>16){
DisplayMetrics dm = new DisplayMetrics();
manager.getDefaultDisplay().getRealMetrics(dm);
screenResolution = new Point(dm.widthPixels, dm.heightPixels); // 这里拿到的是屏幕的实际宽高
}else{  
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes")
Class c;
     try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked")
Method method = c.getMethod("getRealMetrics",DisplayMetrics.class);
method.invoke(display, dm);
screenResolution = new Point(dm.widthPixels, dm.heightPixels);
}catch(Exception e){
screenResolution = new Point(display.getWidth(), display.getHeight()); // 这里拿到的是屏幕的显示宽高
e.printStackTrace();
}
}
   LogUtil.i(TAG, "屏幕分辨率宽高: " + screenResolution);
Point screenResolutionForCamera = new Point();
screenResolutionForCamera.x = screenResolution.x;
screenResolutionForCamera.y = screenResolution.y;
if(screenResolution.x < screenResolution.y){ // 解决竖屏拉伸问题
screenResolutionForCamera.x = screenResolution.y;
screenResolutionForCamera.y = screenResolution.x;
LogUtil.i(TAG, "竖屏转换屏幕分辨率宽高: " + screenResolutionForCamera);
}
cameraResolution = findBestPreviewSizeValue(parameters, screenResolutionForCamera);
LogUtil.i(TAG, "相机的分辨率: " + cameraResolution);
}

免责声明:文章转载自《解决自定义相机分辨率适配、扭曲的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vscode之.netcore的初学者使用和配置(二)Android中文API(115)——AudioFormat下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

android——屏幕适配大全(转载)

http://my.oschina.net/u/2008084/blog/496161 一、适配可行性   早在Android设计之初就考虑到了这一点,为了让app适应标准or山寨屏幕,google已经有一套成熟的解决方案。其中,有这么几个指标需要注意:   (1)屏幕尺寸:单位inch,指的是屏幕对角线长度。   (2)屏幕密度:单位dpi,指的是每in...

【转】PowerManager 与 WakeLock

PowerManager 与 WakeLock PowerManager 用来控制设备的电源状态. 而PowerManager.WakeLock 也称作唤醒锁, 是一种保持 CPU 运转防止设备休眠的方式. 我们经常需要应用保持高亮, 比如看小说. 或者即使屏幕关闭后台也能保持运行, 比如播放MP3. 这里就需要使用 PowerManager 的 Wa...

Android开发 Camera2的CaptureRequest属性整理--完善中

前言如果你想深入了解如何控制Camera2的各种效果配置你一定要了解CaptureRequest的各种属性的意义,此博客记录一些Camera2的CaptureRequest属性值的个人理解解释与官方注解翻译。如有错误理解请指出说明。我对Camera的研究并不是很深入。(贫穷没有进入过玩单反境界) CONTROL_AE 控制曝光组CONTROL_AE_LOC...

APS-C画幅三强宾得K3、佳能70D、尼康D7100关键参数对比

理光正式发布宾得新旗舰单反K-3,搭载APS-C格式2400万像素无低通滤镜传感器,PRIME III图像处理器,感光度范围ISO 100-51200,最高连拍速度8.3fps。相机延续了宾得全金属三防机身特性,并将对焦系统升级至SAFOX 11,焦点数量扩展至27点,8.6万像素RGB测光传感器,双SD卡槽。   作为宾得K5 II(资料 图片...

mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系【转】

本文转载自:http://blog.csdn.net/bmw7bmw7/article/details/45876487 我们先来看一个公式:Mipiclock = [ (width+hsync+hfp+hbp) x (height+vsync+vfp+vbp) ] x(bus_width) x fps/ (lane_num)/2 即mipi屏的传输时钟频...

在webapp上使用input:file, 指定capture属性调用默许相机,摄像,录音功能

## 在webapp上使用input:file, 指定capture属性调用默认相机,摄像,录音功能 在iOS6下开发webapp,使用inputz之file,很有用 <input type="file" accept="image/*" capture="camera"> <input type="file" accept="...