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

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

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值