首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android SurfaceView onTouchEvent配合OpenCV显示

以前我们整体的介绍了利用SurfaceView调用系统的Camera显示图像,并且通过NDK OpenCV的方式进行图像处理,今天这篇我们就是来介绍一下,在SurfaceView中点击显示图像中的区域进行定位...但是看过以前SurfaceView调用camera的朋友应该记得,我们还除了要旋转相机角度,还要对画布的大小对显示的图像进行缩放,所以本章的重点是解决我们点击的图像怎么对应到上面视频中显示出来的红点位置...在调用NDK时通过用生成的图片的宽高乘比例计算出点击的位置坐标(会有一点小的误差,但不影响)。 NDK实现中对坐标进行画圈显示出来。...代码实现 程序框架我们就不在重新搭建了,用的还是《Android利用SurfaceView显示Camera图像爬坑记(六) -- 用OpenCV进行Canny边缘检测》那个Demo。...然后在原来的图片处理方法nv21ToBitmap 中,根据图像大小重新计算图片中的坐标x,y的点 ?

1K10
您找到你想要的搜索结果了吗?
是的
没有找到

Android利用SurfaceView显示Camera图像爬坑记(三)

前言 前一章《Android利用SurfaceView显示Camera图像爬坑记(二)》我们已经利用SurfaceTexture通过生成的Bitmap图片用canvas画出显示,最后最后留了个小尾巴,就是显示的图像并没有全屏...全屏方式 这里就先直接说出结果,想要全屏显示就是两句,直接在canvas中画图的时候画了一个目标框形的大小即可。 ?...最初觉得全屏显示的话,那我直接获取屏幕的宽度和高度,在生成图片的方法里面把图片的宽高重新定义一下就行了,然后我就先在定义了屏幕宽高的两个参数 ? 接着在构造函数中加入获取屏幕宽高的方法 ?...生成图片的nv21ToBitmap的方法参数中我们传入了canvas的宽和高 ? 然后运行的结果直接就变下面这样了 ?...最后我就在想,即然我的图片已经生成好了,那是不是画的时候照的画布大小画就可以了,开始的思路应该是不对的,于是又各种查找,终于找到一个文章,如下 ? 看完后我也是。。。。。

1.2K20

Android利用SurfaceView显示Camera图像爬坑记(二)

前言 前一章《Android利用SurfaceView显示Camera图像爬坑记(一)》我们已经实现了利用SurfaceView将Camera中的实时帧图像显示出来了,我们做这个的主要目录是想把每一帧的数据取出后通过...上面就说明了我们的回调方法已经成功了,想到我们自己把图像处理显示出来,就可以在这个回调的方法中进行图片的处理。...实现原理及核心代码 我们在图像上按获取到的图片Bitbmp通过我们创建的SurfaceHolder来生成Canavas,然后在这个Canavas中能过drawBitbmp的方法绘制图片即可。...来绘制新的图片,就会冲突,然后报错。...接下来我们运行程序后,发现每一帧也都显示出来了,不过图像的方向不对,如下图 ? 解决这个问题也比较简单,我们把我们的nv21ToBitmap处理图片的方法改造一下,让其直接也旋转90度即可。 ?

1.6K10

Android利用SurfaceView显示Camera图像爬坑记(四)

前言 通过前面几篇,利用SurfaceView显示Camera的图像已经没什么问题了,接下来我们就要打磨一下细节,主要就是手机旋转的问题,考虑到我们会用横屏和竖屏的不同的情况。...但是我们切换到横屏后,图像就显示不对了,如下 ? ?...原来的代码中我们也只是解决了默认竖屏的问题 在StartCamera中,设置了直接旋转90度(不过我们改为SurfaceTexture这样显示后,这个没什么用了) ?...视频效果 基本到这,我们这个SurfaceView调Camera的类就完成了,这里我把整个类的代码放到这里,后面可能会在这上面加入通过OpenCV NDK的图像处理,这里做一个备份吧。...params.setPictureFormat(ImageFormat.JPEG); // 设置拍照图片格式 camera.setParameters

2.5K40

surfaceview详解

1.概念       SurfaceView是View类的子类,可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图视图。它的特性是:可以在主线程之外的线程中向屏幕绘图上。...在游戏开发中多用到SurfaceView,游戏中的背景、人物、动画等等尽量在画布canvas中画出。...abstract Canvas lockCanvas(Rect dirty);   // 锁定画布的某个区域进行画图等..因为画完图后,会调用下面的unlockCanvasAndPost来改变显示内容。...4)总结整个过程   继承SurfaceView并实现SurfaceHolder.Callback接口 ----> SurfaceView.getHolder()获得SurfaceHolder对象 --...)获得Canvas对象并锁定画布----> Canvas绘画 ---->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定画图,并提交改变,将图形显示

1.8K90

走进SurfaceView

Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示内容合成器...但它也有缺点,因为这个Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移,缩放等变换,也不能放在其它ViewGroup中,一些View中的特性也无法使用。...SurfaceView如果为用户可见的时候,创建SurfaceView的SurfaceHolder用于显示视频流解析的帧图片,如果发现SurfaceView变为用户不可见的时候,则立即销毁SurfaceView...07 — SurfaceView双缓冲 双缓冲:在运用时可以理解为:SurfaceView在更新视图时用到了两张Canvas,一张frontCanvas和一张backCanvas,每次实际显示的是frontCanvas...例如,如果你已经先后两次绘制了视图A和B,那么你再调用lockCanvas()获取视图,获得的将是A而不是正在显示的B,之后你将重绘的C视图上传,那么C将取代B作为新的frontCanvas显示SurfaceView

1.2K20

什么是 SurfaceView

SurfaceView就是在Window上挖一个洞,它就是显示在这个洞里,其他的View是显示在Window上,所以View可以显式在 SurfaceView之上,你也可以添加一些层在SurfaceView...Surface的排版显示受到视图层级关系的影响,它的兄弟视图结点会在顶端显示。...每次实际显示的是frontCanvas,backCanvas存储的是上一次更改前的视图,当使用lockCanvas()获取画布时,得到的实际上是backCanvas而不是正在显示的frontCanvas...例如,如果你已经先后两次绘制了视图A和B,那么你再调用lockCanvas()获取视图,获得的将是A而不是正在显示的B,之后你将重绘的C视图上传,那么C将取代B作为新的frontCanvas显示SurfaceView...但是这也有缺点,因为这个Surface不在View hierachy中,它的显示也不受View的属性控制,所以不能进行平移、缩放等动画,它也不能放在其它ViewGroup中,SurfaceView不能嵌套使用

1K11

显示进度下载图片

通过下载一张图片作为案例,当然换成其它软件的链接也可以,把保存的文件后缀名改成相应的内容就可以。 ? ? 获取图片大小 首先到网上找一个图片网站,通过鼠标右键复制链接。...编写代码,获取图片文件大小,r是返回的Response对象,有一个headers属性,是一个字典的数据类型,通过它的Content-Length可以获取文件的大小,单位是byte字节。 ?...下载图片 利用with open方法将图片的内容r.content写入img.jpg中,模式要用wb,表示二进制格式写入。 ?...程序运行完成后,会在当前程序文件所在位置生成一张图片,这就是爬取一张图片的原理了,更多网络爬虫的知识将在爬虫与数据处理专题讲解。 ?...丰富进度条 上面的进度条已经实现最核心的功能了,下载速度,大小,所剩时间可以自己去计算,放到显示里面就可以了。 ? ? 加上剩余时间。 ?

3.7K20

Android SurfaceView学习示例

对于显示动态的3D图像来说,例如,那些使用Google Earth功能的应用程序,或者那些提供沉浸体验的交互式游戏,SurfaceView特别有用。它还是实时显示摄像头预览的最佳选择。 ...SurfaceView 和 View 的明显不同之处在于: 1、继承SurfaceView  的视图可以另起一个线程,或者说在子线程中更新视图。...2、 SurfaceView 的画图方法是在子线程中执行的 而 View类的那个示例 的画图方法是在UI线程中执行的。...3、SurfaceView在绘图之前必须使用lockCanvas 方法锁定画布,并得到画布,然后再画布上绘制;当绘制完成后,使用unlockCanvasAndPost 方法解锁画布,然后就显示到屏幕上。...SurfaceView 类的事件处理规则和View一样。

86730
领券