type
status
date
slug
summary
tags
category
icon
password
ANativeWindow是什么
ANativeWindow是C/C++中定义的一个结构体,等同于Java中的
Surface
.Android NDK中可以访问到ANativeWindow.
ANativeWindow中存放像素信息的结构是:
ANativeWindow_Buffer
:主要API
- 获取与surface对应的ANativeWindow
- 保持/释放ANativeWindow对象的引用
- 向buffer中写入数据并提交
- 获取Window Surface的信息:宽/高/像素格式
像素格式定义在
AHARDWAREBUFFER_FORMAT_*
- 改变Window Buffer的格式和大小
一般的流程
- 通过
ANativeWindow_fromSurface
获取与Surface对应的ANativeWindow
对象
ANativeWindow_setBuffersGeometry
设置buffer的尺寸和格式
ANativeWindow_acquire
获取引用对象
- 利用
ANativeWindow_lock/ANativeWindow_unlockAndPost
与之间的绘制代码绘制图像
ANativeWindow_release
释放引用.
一个简单的例子
写个简单的例子:利用ANativeWindow绘制一个灰色的背景.
- C++代码
- Activity代码
总结
- Native层中的
ANativeWindow
对应Java层中的Surface
,因此可以利用SurfaceView + ANativeWindow,用C++代码绘制屏幕;
- 在图像/视频处理中会利用到
ANativeWindow
,也可以与EGL,FFMPEG等结合使用
- Flutter Engine中正是通过
ANativeWindow
才将Dart中的UI与Android中UI联系到一起的.
- 作者:姜康
- 链接:https://jiangkang.tech/article/4419e46b-0a34-41b7-b260-4484dd4c7b80
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。