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!

参考:http://stackoverflow.com/questions/3338235/bitmapfactory-decodebytearray-is-returning-null/7536405#7536405

Android SurfaceView内容获取的更多相关文章

  1. Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法

    http://www.cnblogs.com/SkyD/archive/2010/11/08/1871423.html Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法 Surfa ...

  2. 【风马一族_Android】Android 前端内容1

    Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...

  3. 【风马一族_Android】Android 前端内容

    Android 前端内容 4.1 View 类概述 4.1.1 关于 View //类型说明 view(视图)指的是用户界面组件的基本构建基块.一个视图占据屏幕上的矩形区域,负责绘图和事件处理.视图是 ...

  4. Android SurfaceView实战 带你玩转flabby bird (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42965779 ,本文出自:[张鸿洋的博客] 1.概述 哈,记得以前写过Andro ...

  5. android开发如何获取res/raw和assets文件夹的路径

    ---恢复内容开始--- android开发如何获取res/raw和assets文件夹的路径,主要分为两种情况: 1.如果你只是拷贝动作,那么你只需要得到res/raw和assets文件输入流就可以, ...

  6. Android 通过网络获取图片的源码

    将开发过程中经常用到的内容做个备份,如下的资料是关于Android 通过网络获取图片的的内容. package com.netimg; import android.app.Activity;impo ...

  7. 一培训机构设计的学习android课程内容:供大家参考

    转自:http://www.cnblogs.com/csj007523/archive/2011/06/16/2082682.html 一培训机构设计的学习android课程内容:供大家参考 第一阶段 ...

  8. xamarin.android之 Android 4.4+ 获取图片真实路径

    Android 4.4以下 选择图片是可以获取到图片路径的.高于Android 4.4获取图片路径只是获取到一个图片编号. 所以需要针对Android版本进行路径解析: #region 高于 v4.4 ...

  9. Android SurfaceView vs TextureView

    Android SurfaceView vs TextureView https://github.com/crosswalk-project/crosswalk-website/wiki/Andro ...

随机推荐

  1. 小程序用户openid设置放缓存

    wx.setStorageSync('openid', res.data.data.openid),设置     var openid = wx.getStorageSync('openid')获取

  2. Red and Black HDU - 1312

    There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A ...

  3. 02 Vue之vue对象属性功能&axios数据请求实现

    1.过滤器的声明和使用 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 定义过滤器的方式有两种. 1 使用Vue.filter()进行全局定义 2 在v ...

  4. 【转】XP系统远程桌面连接2012R2提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证

    一.背景 因对方客户的服务器是内网的,需要操作更新服务器的数据库表信息,因此远程对方客户办公司的电脑远程服务器:但是在远程桌面连接出现问题. 二.错误问题 错误问题:“远程计算机需要网络级别身份验证, ...

  5. tomcat8 tomcat-users相关配置

    第一步:修改账号密码 vim conf/tomcat-users.xml <role rolename="manager-gui"/> <role rolenam ...

  6. 把xml转成javabean的工具类

    import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ...

  7. js事件流 事件捕获 及时间冒泡详解

    Javascript与HTML之间的交互是通过事件实现. 一.事件流 事件,是文档或浏览器窗口中发生的一些特定的交互瞬间.事件流,描述的是页面中接受事件的顺序.IE9,chrome,Firefox,O ...

  8. QQ企业邮箱接口

    我推荐的这篇文章很好:http://wenku.baidu.com/link?url=KQIMyrECGb8GS_0fag4PRG64M8Z7wOLbsU1f3BhydXAyYJDC2JMHEuVcy ...

  9. uva-11324-SCC+dp

    https://vjudge.net/problem/UVA-11324 给出一幅有向图,问最大能找到多少个节点,使得这些节点中任意两个节点之间都至少有一条可达路径. 找出SCC后缩点求权重最大路即可 ...

  10. Zookeeper浏览器工具和Eclipse插件

    公司很多产品会使用zookeeper,比如Meta消息中间件,在测试的过程中,我们经常需要查询zookeeper里面的信息来精确定位问题.目前项目中有开发团队自己写的浏览器node-zk-browse ...