Camera2在预览的TextureView上画矩形

来源:互联网 发布:盼盼交友软件靠谱吗 编辑:程序博客网 时间:2024/05/19 14:19

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);

到这里就可以可以实现上述功能了,哈哈。

1 0
原创粉丝点击