gpt4 book ai didi

android - 如何直接从screencap.cpp中获取像素数据

转载 作者:行者123 更新时间:2023-11-30 02:58:53 26 4
gpt4 key购买 nike

我是 Android 新手。我使用 Nexus7 引用设备并从 source.android.com 下载了完整的源代码。我有一个工程系统镜像,我可以做一个系统应用。

/system/bin/screencap 实用程序非常适合我捕获屏幕。我想在我的应用程序中直接使用 screencap.cpp 获取像素数据。

我以前用screencap的时候,流程是这样的

  1. 捕获屏幕并保存图像。
  2. 打开图片文件
  3. 将文件解码为位图
  4. 从位图中获取像素数据(int数组)

我想删除步骤123。直接调用api获取屏幕的像素数据,我该怎么做?

最佳答案

如果您以系统权限运行,您可以只向 SurfaceComposerClient 请求像素数据,而不是启动一个单独的进程来为您完成。

查看屏幕截图 source code ,您真正需要的只是 Binder 初始化:

ProcessState::self()->startThreadPool();

SurfaceComposerClient IPC 调用:

ScreenshotClient screenshot;
sp<IBinder> display = SurfaceComposerClient::getBuiltInDisplay(displayId);
if (display != NULL && screenshot.update(display, Rect(), false) == NO_ERROR) {
base = screenshot.getPixels();
w = screenshot.getWidth();
h = screenshot.getHeight();
s = screenshot.getStride();
f = screenshot.getFormat();
size = screenshot.getSize();
}

您可以安全地忽略它下面的所有 /dev/graphics/fb0 内容——这是一种不再有效的旧方法。其余代码仅用于 PNG 压缩。

如果您没有以系统权限运行,则无法捕获整个屏幕。你可以capture your app虽然。

关于android - 如何直接从screencap.cpp中获取像素数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22856618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com