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来显示图片的更多相关文章

  1. IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

    编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...

  2. iOS View自定义窍门——UIButton实现上显示图片,下显示文字

    “UIButton实现上显示图片,下显示文字”这个需求相信大家在开发中都或多或少会遇见.比如自定义分享View的时候.当然,也可以封装一个item,上边imageView,下边一个label.但是既然 ...

  3. 显示图片的(自定义)吐司Toast

    一般我们提示的时候都是直接提示文字的,其实Toast也可以显示图片 常用方法 Toast.makeText(context,text,duration)这返回一个Toast对象 toast.setDu ...

  4. [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html  这个可以实现ImageView异步加载 ...

  5. 在Toast里面显示图片

        关于怎么在Toast里面显示图片,首先自定义一个toast,在自定义一个布局,这个布局你想让toast显示什么样的布局就定义什么样的,然后在自定的布局中放一个ImageView,在把自己自定义 ...

  6. GridControl 列中显示图片 z

    如何在 DevExpress.XtraGrid.GridControl 显示图片列. 方法很多,我把它们逐一写在附言中,方便大家分情况合理使用. 附言1  附言2  附言3  第 1 条附言  ·  ...

  7. Android在ListView显示图片(重复混乱闪烁问题)

    Android在ListView显示图片(重复混乱闪烁问题) 1.原因分析 ListView item缓存机制: 为了使得性能更优,ListView会缓存行item(某行相应的View). ListV ...

  8. 用android代码显示图片的一部分源码

    ShowPoritionPictureActivity代码: [java] <span style="font-size:16px;"> package com.iwi ...

  9. 我的Android进阶之旅------&gt; Android在TextView中显示图片方法

    面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包括图像的文本信息).并简要说明实现方法. 答案:Android SDK支持例如以下显示富文本信息的方式. 1.使用T ...

随机推荐

  1. lvm相关

    LVM 概念:PV(单个硬件)--VG(组合)--LV(分区) pv打头的:代表pv相关的命令vg带头的:代表vg相关的命令lv带头的: 代表lv相关的命令 create:创建相关remove:移除相 ...

  2. 系统调用system_call处理过程

    原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 linux的系 ...

  3. rabbitmq 结构体

    amqp_basic_properties_t props; props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MOD ...

  4. Sass Maps的函数-map-values($map)、map-merge($map1,$map2)

    map-values($map) map-values($map) 函数类似于 map-keys($map) 功能,不同的是 map-values($map )获取的是 $map 的所有 value ...

  5. HTML基础用 表格做报表

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 前端每日实战:56# 视频演示如何用纯 CSS 描述程序员的生活

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/YvYVvY 可交互视频 此视频是可 ...

  7. Java EE模式和MVC

    Java EE模式 什么是模式? 开发过程中总结出来的约定俗成的"套路". Java EE经历的模式 model1模式 技术组成:JSP+JavaBean model1的弊端:随着 ...

  8. MySQL数据库INNODB 表损坏修复处理过程

    MySQL数据库INNODB 表损坏修复处理过程 博客分类: mysql tomcatmysql  最近mysql数据库经常死掉,用命令net stop mysql命令也无法停掉,关闭Tomcat的时 ...

  9. 关系型数据库---MYSQL---优化

    1.为什么要进行SQL优化? 1.1 查询性能低 1.2 执行时间过长 1.3 等待时间过长 1.4 SQL写的太差(尤其是多表关联查询) 1.5 索引失效 1.6 服务器参数(缓存.线程数)设置不合 ...

  10. BestCoder Round #92 (hdu 6015 6016)

    比赛链接 A题主要是map的使用,比赛的时候问了下队友,下次要记住了 #include<bits/stdc++.h> using namespace std; typedef long l ...