使用Surface View来显示图片
public class YUVImageView extends SurfaceView {
private static final String TAG = "YUVImageView";
private SurfaceHolder surfaceHolder;
private Paint paint;
private Rect srcRect, destRect;
private Canvas canvas;
private Bitmap bitmap;
private BitmapFactory.Options options;
private SurfaceHolder.Callback callback = new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
};
public YUVImageView(Context context) {
this(context, null);
}
public YUVImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public YUVImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView() {
surfaceHolder = getHolder();
surfaceHolder.setFixedSize(640, 480);
surfaceHolder.addCallback(callback);
setZOrderOnTop(true);
setZOrderMediaOverlay(true);
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
srcRect = new Rect(0, 0, 640, 480);
destRect = new Rect(0, 0, 640, 480);
options = new BitmapFactory.Options();
}
public void drawBitmap(int id){
if (surfaceHolder != null) {
canvas = surfaceHolder.lockCanvas();
}
if (surfaceHolder != null && canvas != null) {
try {
canvas.drawColor(Color.WHITE);
bitmap = BitmapFactory.decodeResource(getResources(),id);
if (bitmap != null) {
canvas.drawBitmap(bitmap, srcRect, destRect, paint);
} else {
LogUtils.d(TAG, "create bitmap from yuvData array failed");
}
} catch (Exception e) {
e.printStackTrace();
LogUtils.e(TAG, "drawYUV error ", e);
} finally {
if (canvas != null && surfaceHolder != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
if (bitmap != null) {
bitmap.recycle();
}
}
}
}
public void drawYUV(byte[] yuvData) {
if (surfaceHolder != null) {
canvas = surfaceHolder.lockCanvas();
}
if (surfaceHolder != null && canvas != null) {
try {
canvas.drawColor(Color.WHITE);
bitmap = BitmapFactory.decodeByteArray(yuvData, 0, yuvData.length, options);
if (bitmap != null) {
canvas.drawBitmap(bitmap, srcRect, destRect, paint);
} else {
LogUtils.d(TAG, "create bitmap from yuvData array failed");
}
} catch (Exception e) {
e.printStackTrace();
LogUtils.e(TAG, "drawYUV error ", e);
} finally {
if (canvas != null && surfaceHolder != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
if (bitmap != null) {
bitmap.recycle();
}
}
}
}
}
使用Surface View来显示图片的更多相关文章
- IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)
编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...
- iOS View自定义窍门——UIButton实现上显示图片,下显示文字
“UIButton实现上显示图片,下显示文字”这个需求相信大家在开发中都或多或少会遇见.比如自定义分享View的时候.当然,也可以封装一个item,上边imageView,下边一个label.但是既然 ...
- 显示图片的(自定义)吐司Toast
一般我们提示的时候都是直接提示文字的,其实Toast也可以显示图片 常用方法 Toast.makeText(context,text,duration)这返回一个Toast对象 toast.setDu ...
- [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html 这个可以实现ImageView异步加载 ...
- 在Toast里面显示图片
关于怎么在Toast里面显示图片,首先自定义一个toast,在自定义一个布局,这个布局你想让toast显示什么样的布局就定义什么样的,然后在自定的布局中放一个ImageView,在把自己自定义 ...
- GridControl 列中显示图片 z
如何在 DevExpress.XtraGrid.GridControl 显示图片列. 方法很多,我把它们逐一写在附言中,方便大家分情况合理使用. 附言1 附言2 附言3 第 1 条附言 · ...
- Android在ListView显示图片(重复混乱闪烁问题)
Android在ListView显示图片(重复混乱闪烁问题) 1.原因分析 ListView item缓存机制: 为了使得性能更优,ListView会缓存行item(某行相应的View). ListV ...
- 用android代码显示图片的一部分源码
ShowPoritionPictureActivity代码: [java] <span style="font-size:16px;"> package com.iwi ...
- 我的Android进阶之旅------> Android在TextView中显示图片方法
面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包括图像的文本信息).并简要说明实现方法. 答案:Android SDK支持例如以下显示富文本信息的方式. 1.使用T ...
随机推荐
- Java并发(基础知识)—— Java中断机制
上文讲解了Java线程的创建.启动以及停止,在讲到停止线程时说到了Java中断,Java中断是停止线程的一种协作机制,本文打算对Java中断机制进行详细讲解. 在网上搜索Java中断机制,发现两篇好文 ...
- shell 函数传递参数的几种方式
1.最近总结了 shell 中 function 的传递变量的几种方式 1.传递单个变量 2.传递数组变量 #!/bin/bash #trying to pass an variable. ...
- kaildi讲解
转载声明:本文为转载文章 作者:ferb2015 原文地址:https://blog.csdn.net/eqiang8848/article/details/81543599 kaldi是一个开源的语 ...
- 为什么我们从Angular 2迁移到Vue.js(为什么我们没有选择React)
在Rever(www.reverscore.com),我们刚刚使用Vue.js发布了我们的Web客户端的新版本.经过641次提交和16周的紧张开发,我们非常自豪之前做出的决定.8个月前,我们的前端在使 ...
- python wxpython
pip install wxpython import wxapp = wx.App(False)frame = wx.Frame(None, wx.ID_ANY, "Hollo World ...
- HTTP协议-Cookie和Session详解
前言: 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的跟踪技术就是Cookie和Session. Cookie通过在客户端记录信息确定用户身份,Session通过在 ...
- HAProxy基于Centos6.5安装及配置
一.使用2.6内核Linux,配置sysctl参数 vi /etc/sysctl.conf #haproxy confignet.ipv4.tcp_tw_reuse = 1net.ipv4.ip_lo ...
- commons-fileupload-1.2.1.jar 插件上传与下载
1:首先在页面上写个文本域: <%@ page language="java" import="java.util.*" pageEncoding=&qu ...
- HDU 6040 Hints of sd0061 —— 2017 Multi-University Training 1
Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- KVM(多电脑切换器)
KVM:Keyboard Video Mouse的缩写.KVM 交换机通过直接连接键盘.视频和鼠标 (KVM) 端口,让您能够访问和控制计算机.KVM 技术无需目标服务器修改软件.这就意味着可以在 W ...