Android SurfaceView内容获取
Android SurfaceView内容获取
这几天在做一个Android的小项目,项目中需要使用到SurfaceView来显示相机捕获的内容,同时还有一个SurfaceView用于绘制一些辅助线,最后要得到一张图,包含相机内容和用户编辑的辅助线。
用户的辅助线是相对比较好保存的,直接将操作在图片上进行,再将图片贴到SurfaceView上即可,使用如下代码:
SurfaceView mSurfaceView = (SurfaceView)findViewById(R.id.surface_view);
Bitmap mLineBitmap = Bitmap.createBitmap(800, 480, Bitmap.Config.ARGB_8888);
Canvas bitmapCanvas = new Canvas(mLineBitmap);
Canvas canvas = mSurfaceView.getHolder.lockCanvas();
canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
bitmapCanvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
// draw line
mAssistLine.DrawLine(bitmapCanvas);
canvas.drawBitmap(mLineBitmap, 0, 0, null);
效果图:

但是想要将展示相机内容的SurfaceView中的相机内容捕获下来就不容易了。因为相机内容并不是使用Canvas绘制的。最后在网上找到了一个方法,代码如下:
sCamera.setOneShotPreviewCallback(new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
if(data != null) {
Size previewSize = sCamera.getParameters().getPreviewSize();
Log("previewSize: " + previewSize.height +"," + previewSize.width);
YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, previewSize.width, previewSize.height, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 80, baos);
byte[] jdata = baos.toByteArray();
Bitmap tmpBitmap = BitmapFactory.decodeByteArray( jdata, 0, jdata.length);
if(tmpBitmap!=null) {
mRvcBitmap = Bitmap.createScaledBitmap(tmpBitmap, 800, 480, false);
if(!mRvcBitmap.equals(tmpBitmap)) {
tmpBitmap.recycle();
tmpBitmap = null;
}
Log("get the frame bitmap");
camera.startPreview();
} else {
Log("tmpBitmap is null" + sCamera.getParameters().getPictureFormat());
}
} else {
Log("data is null, jpge");
}
}
});
效果图:

一切伟大的思想和行动都一个微不足道的开始,Hello,world!
Android SurfaceView内容获取的更多相关文章
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
http://www.cnblogs.com/SkyD/archive/2010/11/08/1871423.html Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法 Surfa ...
- 【风马一族_Android】Android 前端内容1
Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...
- 【风马一族_Android】Android 前端内容
Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...
- Android SurfaceView实战 带你玩转flabby bird (上)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42965779 ,本文出自:[张鸿洋的博客] 1.概述 哈,记得以前写过Andro ...
- android开发如何获取res/raw和assets文件夹的路径
---恢复内容开始--- android开发如何获取res/raw和assets文件夹的路径,主要分为两种情况: 1.如果你只是拷贝动作,那么你只需要得到res/raw和assets文件输入流就可以, ...
- Android 通过网络获取图片的源码
将开发过程中经常用到的内容做个备份,如下的资料是关于Android 通过网络获取图片的的内容. package com.netimg; import android.app.Activity;impo ...
- 一培训机构设计的学习android课程内容:供大家参考
转自:http://www.cnblogs.com/csj007523/archive/2011/06/16/2082682.html 一培训机构设计的学习android课程内容:供大家参考 第一阶段 ...
- xamarin.android之 Android 4.4+ 获取图片真实路径
Android 4.4以下 选择图片是可以获取到图片路径的.高于Android 4.4获取图片路径只是获取到一个图片编号. 所以需要针对Android版本进行路径解析: #region 高于 v4.4 ...
- Android SurfaceView vs TextureView
Android SurfaceView vs TextureView https://github.com/crosswalk-project/crosswalk-website/wiki/Andro ...
随机推荐
- 小程序用户openid设置放缓存
wx.setStorageSync('openid', res.data.data.openid),设置 var openid = wx.getStorageSync('openid')获取
- Red and Black HDU - 1312
There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A ...
- 02 Vue之vue对象属性功能&axios数据请求实现
1.过滤器的声明和使用 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 定义过滤器的方式有两种. 1 使用Vue.filter()进行全局定义 2 在v ...
- 【转】XP系统远程桌面连接2012R2提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证
一.背景 因对方客户的服务器是内网的,需要操作更新服务器的数据库表信息,因此远程对方客户办公司的电脑远程服务器:但是在远程桌面连接出现问题. 二.错误问题 错误问题:“远程计算机需要网络级别身份验证, ...
- tomcat8 tomcat-users相关配置
第一步:修改账号密码 vim conf/tomcat-users.xml <role rolename="manager-gui"/> <role rolenam ...
- 把xml转成javabean的工具类
import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ...
- js事件流 事件捕获 及时间冒泡详解
Javascript与HTML之间的交互是通过事件实现. 一.事件流 事件,是文档或浏览器窗口中发生的一些特定的交互瞬间.事件流,描述的是页面中接受事件的顺序.IE9,chrome,Firefox,O ...
- QQ企业邮箱接口
我推荐的这篇文章很好:http://wenku.baidu.com/link?url=KQIMyrECGb8GS_0fag4PRG64M8Z7wOLbsU1f3BhydXAyYJDC2JMHEuVcy ...
- uva-11324-SCC+dp
https://vjudge.net/problem/UVA-11324 给出一幅有向图,问最大能找到多少个节点,使得这些节点中任意两个节点之间都至少有一条可达路径. 找出SCC后缩点求权重最大路即可 ...
- Zookeeper浏览器工具和Eclipse插件
公司很多产品会使用zookeeper,比如Meta消息中间件,在测试的过程中,我们经常需要查询zookeeper里面的信息来精确定位问题.目前项目中有开发团队自己写的浏览器node-zk-browse ...