Android中用Bitmap画图预览,视频图像分辨率是320x240(4:3),手机分辨率是540x960(9:16),图像被拉伸怎么办?

问题描述

使用V4L2进行视频采集,采集到的视频数据分辨率为320x240(4:3),使用Canvas,drawBitmap方式在Android设备上预览图像

Android设备分辨率为 540x960(9:16),所以全屏预览时图像被拉伸,这种问题如何解决?

没思路啊,哪位大神指导指导!!

下面是画图像的代码,大神们帮忙看看

public void run() {

			//获取屏幕信息

			DisplayMetrics dm = new DisplayMetrics();

			getWindowManager().getDefaultDisplay().getMetrics(dm);

			int screenWidth = dm.widthPixels;

			int screenHeigh = dm.heightPixels;

			Log.i(tag, "------------进入DrawImage---------------");

			Log.i(tag, "当前屏幕宽为:" + screenWidth + ", 当前屏幕高为: " + screenHeigh);

			Log.i(tag, "进入DrawImage USB摄像头当前状态为" + cameraExists);

			while (cameraExists) {

//				rect = new Rect(0, 0, screenWidth/2, screenHeigh/2);

				rectF = new RectF(0, 0, screenWidth, screenHeigh);   //w和h分别是屏幕的宽和高,也就是你想让图片显示的宽和高  

//				Log.i(tag, "------------USB摄像头开始画图---------------");

				if (bmp != null) {

					Canvas canvas = holder.lockCanvas();

					if (canvas != null) {

//						canvas.drawBitmap(bmp, null, rect, null);

						canvas.drawBitmap(bmp, null, rectF, null);

						holder.unlockCanvasAndPost(canvas);

					}

				}

			}

			Log.i(tag, "线程退出DrawImage");

		}

解决方案1

canvas.drawBitmap(srcBitmap, matrix, null); 用矩阵缩放一下试试。

时间: 2024-12-29 11:14:15

Android中用Bitmap画图预览,视频图像分辨率是320x240(4:3),手机分辨率是540x960(9:16),图像被拉伸怎么办?的相关文章

玩转Android Camera开发(四):预览界面四周暗中间亮,只拍摄矩形区域图片(附完整源码)

杂家前文曾写过一篇关于只拍摄特定区域图片的demo,只是比较简陋,在坐标的换算上不是很严谨,而且没有完成预览界面四周暗中间亮的效果,深以为憾,今天把这个补齐了. 在上代码之前首先交代下,这里面存在着换算的两种模式.第一种,是以屏幕上的矩形区域为基准进行换算.举个例子,屏幕中间一个 矩形框为100dip*100dip.这里一定要使用dip为单位,否则在不同的手机上屏幕呈现的矩形框大小不一样.先将这个dip换算成px,然后根据屏幕的宽和高的像素计算出矩形区域,传给Surfaceview上铺的一层Vi

终极指南:如何为iOS8应用制作预览视频

最近一两个月里,苹果的世界里出现了很多新东西,比如屏幕更大的iPhone 6,可穿戴设备Apple Watch,iOS8,以及旨在帮助用户更好的发现应用的App Store改版等等. 说到App Store的改版,最值得设计师.开发者和市场人员关注的大概就是视频预览功能了.官方将其称为“应用预览(App Previews)”,如今已经正式出现在iOS8的App Store当中.自然,已经有一大波设计师和开发者为他们的产品制作了预览视频并通过iTunes Connect上传.坦率的说,如果你也有自

APP_Store - 怎样为iOS8应用制作预览视频

关于iOS 8应用预览视频的话题,从设计.技术规范,到录屏.编辑工具,介绍的都比较详尽:建议收藏,在接下来用的到的时候作以参考.下面进入译文. 最近一两个月里,苹果的世界里出现了很多新东西,比如屏幕更大的iPhone 6,可穿戴设备Apple Watch,iOS8,以及旨在帮助用户更好的发现应用的App Store改版等等. 说到App Store的改版,最值得设计师.开发者和市场人员关注的大概就是视频预览功能了.官方将其称为“应用预览(App Previews)”,如今已经正式出现在iOS8的

eclipse创建android项目无法正常预览布局文件

eclipse创建android项目时,预览layout.xml文件时提示: This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in,导致无法正常预览布局文件.问题根源:SDK版本过高,ADT版本过低.解决方法如下. 工具/原料 eclipse ADT插件 方法/步骤 1 找到eclipse文件夹,打开eclipse软件,创建a

Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件

一.问题描述 今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建android项目时,预览activity_main.xml文件时提示: This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in,导致无法正常预览布局文件,现象如下图所示: 上网查了一下原因,问题根源

iOS预览视频的制作

花了两天折腾这个东西,又是升级iOS8,又是安装Yosemite,终于折腾成功了. 安装Yosemite的时候新划分了一个分区,把它安装到新分区,不影响现在的系统,启动时在系统偏好设置->启动磁盘中选择启动到哪个系统,很方便. 安装iOS8很简单了,在iTunes中按住option键点击检测更新,选择下载的iOS8系统文件,一路安装下去即可. 接下来就是在Yosemite中制作预览视频了,连上iPad mini 2真机,用QuickTime Player录制电影,大小为1200 x 900,用你

H5上传前预览视频(结合 video标签 &&h5 fileApi)

2017/09/14 发布 js代码: // hTML5实现表单内的上传文件框,上传前预览视频,刷新预览video,使用HTML5 的File API, // 建立一个可存取到该file的url,一个空的video标签,ID为video0,把选择的文件显示在video标签中,实现视频预览功能. // 需要选择支持HTML API的浏览器. $("#video").change(function(){ var objUrl = getObjectURL(this.files[0]) ;

玩转Android Camera开发(四):预览界面四周暗中间亮,仅仅拍摄矩形区域图片(附完整源代码)

杂家前文曾写过一篇关于仅仅拍摄特定区域图片的demo.仅仅是比較简陋.在坐标的换算上不是非常严谨,并且没有完毕预览界面四周暗中间亮的效果,深以为憾.今天把这个补齐了. 在上代码之前首先交代下,这里面存在着换算的两种模式.第一种,是以屏幕上的矩形区域为基准进行换算.举个样例.屏幕中间一个 矩形框为100dip*100dip.这里一定要使用dip为单位,否则在不同的手机上屏幕呈现的矩形框大小不一样. 先将这个dip换算成px.然后依据屏幕的宽和高的像素计算出矩形区域,传给Surfaceview上铺的

Directshow_驱动摄像头预览视频

出于兴趣一直以来都断断续续看过dshow的东西,可没怎么系统地总结过(学习还是要多实践,多总结啊). dshow预览摄像头捕捉的视频比较简单基础,网上相关的资料很多,简单的思路由下面代码所示: ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder // Initialize pBuild (not shown). IBaseFilter *pCap; // Video capture filter. /* Initialize pCap