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

最新文章

  1. iOS 方法修饰符
  2. 日常积累oracle 有关信息
  3. [BZOJ 3682]Phorni
  4. 转大写字母-(ASCII表)
  5. jsp中JavaBean的用法
  6. 有关C,C++,C#, Java的图形图像处理类库 整理(未完待续)
  7. android 滚动视图(ScrollView)
  8. Host文件修改后无效的解决办法
  9. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
  10. 洛谷 [P2483] [模板] k短路
  11. Struts 2 之 OGNL
  12. Scrapy 隐含 bug: 强制关闭爬虫后从 requests.queue 读取的已保存 request 数量可能有误
  13. 二叉树之AVL树
  14. call()和apply()
  15. 【Big Data - Hadoop - MapReduce】初学Hadoop之图解MapReduce与WordCount示例分析
  16. MySQL 5.7.18的安装与主从复制(转自:https://www.baidu.com/home/news/data/newspage?nid=9485770887287731252&n_typ)
  17. poj3666(DP+离散化)
  18. nginx 上php不可写解决方法
  19. 卷积神经网络CNN在自然语言处理中的应用
  20. C二维数组行为空,列不为空

热门文章

  1. SE-Net要点
  2. prune研究记录(二)
  3. React文档(二)Hello World
  4. java之collection总结
  5. Leetcode 860. 柠檬水找零
  6. Git的各种状态
  7. Oracle用户密码认证方式
  8. 跳转到页面的某个anchor
  9. select2中的ajax请求
  10. Qt一步一步实现插件通信(附源码)