android::SurfaceControl 获取宽高 demo
时间: 2024-01-07 07:02:45 浏览: 237
以下是一个获取 SurfaceControl 宽高的示例代码:
```c++
sp<SurfaceControl> surfaceControl;
int width = 0, height = 0;
// 获取 SurfaceControl 对象,这里假设已经获取到了
// ...
SurfaceComposerClient::Transaction transaction;
transaction.getTransformMatrix(surfaceControl->getHandle(), &matrix);
transaction.apply();
transaction.close();
Rect bounds;
surfaceControl->getBounds(&bounds);
width = bounds.getWidth();
height = bounds.getHeight();
// 现在变量 width 和 height 分别为 SurfaceControl 的宽度和高度
```
在示例代码中,我们首先获取了一个 SurfaceControl 对象(这里省略了获取过程),然后通过 `getBounds()` 方法获取了其边界矩形,再通过 `getWidth()` 和 `getHeight()` 方法获取宽度和高度。注意,这里的宽度和高度是以像素为单位的整数值。
相关问题
android::Surface 如何获取android::SurfaceControl
要获取 `android::SurfaceControl`,需要在 `android::Surface` 对象上调用 `getSurfaceControl()` 方法。例如,可以使用以下代码将 `android::Surface` 对象转换为 `android::SurfaceControl` 对象:
```
sp<android::Surface> surface = ...; // 获取 Surface 对象
sp<android::SurfaceControl> surfaceControl = surface->getSurfaceControl();
```
这样就能够获取到 `android::SurfaceControl` 对象了。注意,如果 `android::Surface` 对象不是从 `android::SurfaceControl` 对象创建的,或者 `android::Surface` 对象已经被释放,那么调用 `getSurfaceControl()` 方法将会返回 `nullptr`。
android::Surface 如何获取SurfaceControl
要获取到 `android::SurfaceControl`,可以通过以下代码:
```c++
#include <gui/Surface.h>
#include <gui/SurfaceControl.h>
sp<IBinder> display = SurfaceComposerClient::getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain);
DisplayInfo dinfo;
SurfaceComposerClient::getDisplayInfo(display, &dinfo);
ssize_t displayWidth = dinfo.w;
ssize_t displayHeight = dinfo.h;
sp<SurfaceControl> surfaceControl = SurfaceComposerClient::getInstance()->createSurface(
String8("MySurface"),
displayWidth, displayHeight, PIXEL_FORMAT_RGBA_8888, 0);
sp<Surface> surface = surfaceControl->getSurface();
```
这里我们调用 `SurfaceComposerClient::getInstance()->createSurface()` 方法创建了一个 `SurfaceControl` 对象,并通过 `getSurface()` 方法获取到了对应的 `Surface` 对象。
阅读全文