本文主要是介绍Camera2在预览的TextureView上画矩形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Camera2在预览的TextureView上画矩形
盖天地不全,这经原是全全的,今沾破了, 乃是应不全之奥妙也,岂人力 所能与耶! 愿来者补充
使用手机摄像头进行人脸检测,对图像进行处理然后,画出矩形在预览的图像中。其他的也类似。
使用TextureView对Camera进行预览,然后想在上面画出矩形,使用了TextureView类的方法,但都不行。,其他人解释是:进行预览的时候,是使用了GPU进行渲染,在硬件层进行操作。。而TextureView类的方法都是在软件层进行改动,是没有办法进行修改的。
尝试一
使用跟SurfaceView一样的方法,处于底层并在上层进行画框。但是就第一步就不行,TextureView就没有办法处于底层。
尝试二
直接弄个透明的ImageView进行覆盖,然后再ImageView中画框,尝试了一下,好像还是不行,不过我觉得有救,哈哈。
最终版本:
既然SurfaceView可以处于顶层,那我就是用一个透明的Surfaceview处于顶层然后,在SurfaceView中画框。就可以了
xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".camera.CameraActivity">
<FrameLayout
android:id="@+id/frame_layout_rect"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextureView
android:id="@+id/texture"android:layout_width="wrap_content"android:layout_height="wrap_content"/><SurfaceView
android:id="@+id/surfaceview"android:layout_width="wrap_content"android:layout_height="wrap_content" /></FrameLayout>
</RelativeLayout>
这里是设置一下SurfaceView并获取到surfaceHolder便于后面画框
surfaceview.setZOrderOnTop(true);//处于顶层surfaceview.getHolder().setFormat(PixelFormat.TRANSPARENT);//设置surface为透明surfaceHolder=surfaceview.getHolder();
画框,,其中还有一个重要的,怎么清楚掉上一次的画框。
很简单,但是我也很麻烦
//定义画笔Paint mpaint = new Paint();mpaint.setColor(Color.BLUE);// mpaint.setAntiAlias(true);//去锯齿mpaint.setStyle(Paint.Style.STROKE);//空心// 设置paint的外框宽度mpaint.setStrokeWidth(2f);Canvas canvas=new Canvas();canvas = surfaceHolder.lockCanvas();canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); //清楚掉上一次的画框。Rect r = new Rect(0,0,100,100); canvas.drawRect(r, mpaint); surfaceHolder.unlockCanvasAndPost(canvas);
到这里就可以可以实现上述功能了,哈哈。
这篇关于Camera2在预览的TextureView上画矩形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!